From 52460af64054d990ded808aee37d69be5fd3df13 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 5 Oct 2025 04:37:26 +0000 Subject: [PATCH 01/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202025-10-05=2004:37:26?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 10 +++++----- jp/kejilion.sh | 6 +++--- kr/kejilion.sh | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 322c45f41..0dc181c4e 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -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 IP or IP segment to be released:" o_ip allow_ip $o_ip ;; 6) @@ -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" @@ -13036,7 +13036,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) diff --git a/jp/kejilion.sh b/jp/kejilion.sh index c93e5aea8..66380bbd3 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 @@ -8022,7 +8022,7 @@ linux_ldnmp() { echo "Redisポート:6379" echo "" echo "ウェブサイトURL:https://$yuming" - echo "バックエンドログインパス: /admin" + echo "バックグラウンドログインパス: /admin" echo "------------------------" echo "ユーザー名:admin" echo "パスワード:管理者" @@ -13036,7 +13036,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) diff --git a/kr/kejilion.sh b/kr/kejilion.sh index b7d69c906..21b57de9f 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -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) @@ -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 "비밀번호 : 관리자" @@ -13036,7 +13036,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) From 884041258a384fdb6664ad8cd68a1faae6db111f Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 12 Oct 2025 04:05:06 +0000 Subject: [PATCH 02/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202025-10-12=2004:05:06?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 2512 ++++++++++++++-------------- jp/kejilion.sh | 4276 ++++++++++++++++++++++++------------------------ kr/kejilion.sh | 4154 +++++++++++++++++++++++----------------------- 3 files changed, 5471 insertions(+), 5471 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 0dc181c4e..11f6473a4 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -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 "$@" @@ -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. +# 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. @@ -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 -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 "----------------------" 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 @@ -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 @@ -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}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." - 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 @@ -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,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 } @@ -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,37 +516,37 @@ 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 "------------------------" - 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) 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) 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) @@ -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 @@ -653,27 +653,27 @@ 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 the mirror" - read -e -p "Please enter the mirror name (please separate multiple mirror names with spaces):" imagenames + send_stats "Pull image" + 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}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" - read -e -p "Please enter the mirror name (please separate multiple mirror names with spaces):" imagenames + send_stats "Update image" + 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}Updated image:$name${gl_bai}" + 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,11 +761,11 @@ install_crontab() { ;; esac else - echo "The operating system cannot be determined." + echo "Unable to determine operating system." 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}" } @@ -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"}' - # 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 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 + # Check if the current configuration already has ipv6 settings local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq '.ipv6 // false') # Update configuration and enable IPv6 @@ -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 @@ -814,20 +814,20 @@ 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 - # 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 + # Compare original configuration to new configuration if [[ "$CURRENT_IPV6" == "false" ]]; then echo -e "${gl_huang}IPv6 access is currently closed${gl_bai}" else @@ -879,23 +879,23 @@ 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 - # 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 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 save_iptables_rules - send_stats "The port has been opened" + send_stats "Port opened" } @@ -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 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 @@ -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 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" @@ -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 @@ -1005,9 +1005,9 @@ enable_ddos_defense() { send_stats "Turn on DDoS defense" } -# Turn off 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 @@ -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 # 去掉第一个参数,剩下的全是国家代码 @@ -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,14 +1111,14 @@ iptables_panel() { save_iptables_rules while true; do clear - echo "Advanced Firewall Management" - send_stats "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 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" @@ -1126,24 +1126,24 @@ 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 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 @@ -1180,21 +1180,21 @@ 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 allowed IP or IP segment:" o_ip allow_ip $o_ip ;; 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,20 +1218,20 @@ 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 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 the country$country_codeIP" + send_stats "clear country$country_codeIP" ;; *) @@ -1253,17 +1253,17 @@ 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" mkswap -f "$partition" done - # Make sure /swapfile is no longer used + # Make sure /swapfile is no longer in use swapoff /swapfile - # Delete the old /swapfile + # Delete old /swapfile rm -f /swapfile # Create a new swap partition @@ -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" } @@ -1312,16 +1312,16 @@ 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}" - # 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}" - # 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" } @@ -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 @@ -1519,16 +1519,16 @@ 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 "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" + 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 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 ➠ 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" @@ -1552,7 +1552,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}" - read -e -p "Please enter your IP or the resolved domain name:" yuming + read -e -p "Please enter your IP or resolved domain name:" yuming } @@ -1652,18 +1652,18 @@ 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 - read -e -p "Need to clean Cloudflare's cache? (y/n):" answer + # 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 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 (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" @@ -1680,13 +1680,13 @@ cf_purge_cache() { --data '{"purge_everything":true}' done - echo "The cache clear request has been sent." + echo "Cache clearing request has been sent." } web_cache() { - send_stats "Clean up site cache" + send_stats "Clear site cache" cf_purge_cache cd /home/web && docker compose restart restart_redis @@ -1699,14 +1699,14 @@ 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 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 @@ -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:]') - # Check whether the database exists before deleting it to avoid errors - echo "Deleting the database:$dbname" + # Check whether the database exists before deleting it to avoid errors. + echo "Deleting database:$dbname" docker exec mysql mysql -u root -p"$dbrootpasswd" -e "DROP DATABASE ${dbname};" > /dev/null 2>&1 done @@ -1733,23 +1733,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 + # 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 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 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 @@ -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/ { @@ -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/ { @@ -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 @@ -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,11 +1881,11 @@ nginx_br() { }' /home/web/nginx.conf 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 @@ -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 @@ -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 @@ -1938,11 +1938,11 @@ nginx_zstd() { 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 @@ -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,23 +1991,23 @@ 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 "7. View the list of defense rules 8. View real-time monitoring of logs" + 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. 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" + echo "33. Turn on DDOS defense 34. Turn off DDOS defense" echo "------------------------" echo "9. Uninstall the defense program" 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 @@ -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 @@ -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 -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 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 ;; @@ -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) @@ -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" @@ -2239,10 +2239,10 @@ 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 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,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} installed" +# 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 # } @@ -2386,7 +2386,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "Access address:" +echo "Visit address:" ip_address @@ -2424,26 +2424,26 @@ 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) - # 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 [[ "$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) - # 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) @@ -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 for releasing 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,12 +2559,12 @@ 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 - # 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,20 +2589,20 @@ 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 "Error: Please provide port number and IP to allow access." + echo "Usage: block_host_port " return 1 fi 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 - # 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,12 +2616,12 @@ 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 - # 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 } @@ -2648,47 +2648,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 "Error: Please provide port number and IP to allow access." + echo "Usage: clear_host_port_rules " return 1 fi 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 - # 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 - # 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 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 } @@ -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 @@ -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 @@ -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,20 +2800,20 @@ 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" ;; 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,16 +2863,16 @@ 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 "------------------------" - 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 @@ -2895,14 +2895,14 @@ docker_app_plus() { ;; 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 ;; 7) @@ -2995,12 +2995,12 @@ 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 } -# 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 @@ -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:" @@ -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 @@ -3365,24 +3365,24 @@ 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 "------------------------" echo "" 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 "1. Apply/update domain name certificate 2. Change 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 the specified site data" + 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,10 @@ 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!" + send_stats "Change site domain name" + echo -e "${gl_hong}Strongly 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 + read -e -p "Please enter new domain name:" yuming install_certbot install_ssltls certs_status @@ -3442,10 +3442,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 "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 new domain name:" yuming install_certbot install_ssltls certs_status @@ -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,16 +3523,16 @@ 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 "------------------------" - 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 +3598,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 +3620,7 @@ EOF donlond_frp frps - # Output generated information + # Output the generated information ip_address echo "------------------------" echo "Parameters required for client deployment" @@ -3640,7 +3640,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,12 +3662,12 @@ 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 "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} - 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,8 +3682,8 @@ remote_port = ${remote_port} EOF - # Output generated information - echo "Serve$service_nameAdded successfully to frpc.toml" + # Output the generated information + echo "Serve$service_nameSuccessfully added to frpc.toml" docker restart frpc @@ -3694,12 +3694,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 "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 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 @@ -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,11 +3739,11 @@ list_forwarding_services() { type } - # Update the current service name + # Update current service name if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # Clear the previous value + # Clear previous value local_ip="" local_port="" remote_port="" @@ -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, \ @@ -3785,17 +3785,17 @@ 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 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 @@ -3804,18 +3804,18 @@ 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:" - # Process IPv4 address + # Handling IPv4 addresses for port in "${ports[@]}"; do if [[ $port != "8055" && $port != "8056" ]]; then echo "http://${ipv4_address}:${port}" 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 @@ -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}" @@ -3860,9 +3860,9 @@ 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 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,13 +3871,13 @@ 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 "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 @@ -3906,36 +3906,36 @@ 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" - 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} 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" ;; 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" ;; 00) - send_stats "Refresh the FRP service status" + send_stats "Refresh FRP service status" echo "FRP service status has been refreshed" ;; @@ -3949,7 +3949,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,10 +3957,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 -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 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 @@ -4003,7 +4003,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 +4051,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:" @@ -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) @@ -4078,8 +4078,8 @@ yt_menu_pro() { echo "The installation is complete. Press any key to continue..." read ;; 2) - send_stats "Update yt-dlp..." - echo "Update yt-dlp..." + send_stats "Updating yt-dlp..." + echo "Updating yt-dlp..." yt-dlp -U add_app_id @@ -4091,18 +4091,18 @@ 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" - 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 \ --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 @@ -4110,7 +4110,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,31 +4118,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 "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 \ --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 + 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 +4178,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 @@ -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 the system log..." + echo "Delete system log..." rm -rf /var/log/* echo "Delete temporary files..." rm -rf /tmp/* @@ -4275,9 +4275,9 @@ 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 the system log..." + echo "Delete system log..." rm -rf /var/log/* echo "Delete temporary files..." rm -rf /tmp/* @@ -4346,7 +4346,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 +4392,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" @@ -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" @@ -4417,7 +4417,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 @@ -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,17 +4460,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 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}" + echo -e "${gl_hong}Error: Public key content not entered.${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}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,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}ROOT login is set up!${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,8 +4560,8 @@ 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_hui}Thanks to the script support of leitbogioro and bin456789!${gl_bai} " + 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" 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 @@ -4770,7 +4770,7 @@ dd_xitong() { ;; 36) - send_stats "Reload flying cow" + send_stats "Reinstall Feiniu" dd_xitong_3 bash reinstall.sh fnos reboot @@ -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 @@ -4856,17 +4856,17 @@ 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 "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 "------------------------" - 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,10 +4911,10 @@ 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 "Please back up the data and will enable BBR3 for you to upgrade the Linux kernel." + echo "Only supports Debian/Ubuntu" + 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 +4922,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 +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 - # 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 +4949,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,29 +4968,29 @@ 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 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)..." + 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 "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)..." + 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" @@ -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 } @@ -5014,32 +5014,32 @@ 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 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 "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 "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 possible, 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 @@ -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 - # Execute Docker commands + # Execute Docker command docker run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5122,8 +5122,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}" } @@ -5135,23 +5135,23 @@ clamav_scan() { clamav() { root_use - send_stats "Virus Scan Management" + send_stats "Virus scan management" while true; do clear 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 "Including viruses, Trojan horses, spyware, malicious scripts and other harmful software." + 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 the important directory${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 selection:" sub_choice + 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 +5168,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 @@ -5186,9 +5186,9 @@ clamav() { -# High-performance mode optimization function +# 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 +5219,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 @@ -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}" @@ -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,11 +5268,11 @@ optimize_balanced() { } -# Restore the default settings function +# Restore 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}" + echo -e "${gl_lv}Restore file descriptors...${gl_bai}" ulimit -n 1024 echo -e "${gl_lv}Restore virtual memory...${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 @@ -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 page + echo -e "${gl_lv}Revert other optimizations...${gl_bai}" + # 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 +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 construction 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 @@ -5357,22 +5357,22 @@ 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 "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 "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 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 "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 "2. Balanced optimization mode: strikes a balance between performance and resource consumption, suitable for daily use." + 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" 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 ~ @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "Website optimization model" + send_stats "Website optimization mode" ;; 4) cd ~ @@ -5438,7 +5438,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 @@ -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,12 +5476,12 @@ 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) 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 +5511,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 @@ -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 "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 "------------------------" - read -e -p "Enter your choice:" choice + read -e -p "Enter your selection:" 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 "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) @@ -5623,23 +5623,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 "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 + 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 +5654,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 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 "- 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 + # Prompt user for backup directory + echo "Example of creating a backup:" + 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 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" # 配置文件和软件包配置 @@ -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 @@ -5692,20 +5692,20 @@ 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 a backup - echo "Creating a backup$BACKUP_NAME..." + # Create backup + 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 "The backup was created successfully:$BACKUP_DIR/$BACKUP_NAME" + echo "Backup created successfully:$BACKUP_DIR/$BACKUP_NAME" else echo "Backup creation failed!" exit 1 @@ -5715,8 +5715,8 @@ create_backup() { # 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 + # 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 if [ ! -f "$BACKUP_DIR/$BACKUP_NAME" ]; then @@ -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 } @@ -5745,7 +5745,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 @@ -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 @@ -5775,11 +5775,11 @@ 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 "------------------------" - 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 ;; @@ -5800,48 +5800,48 @@ 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" - echo "Example to create 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" echo "- Username: root" echo "- Port: 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 "Please enter a connection name:" name + 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 - 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) - 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 @@ -5862,19 +5862,19 @@ add_connection() { esac echo "$name|$ip|$user|$port|$password_or_key" >> "$CONFIG_FILE" - echo "The connection is saved!" + echo "Connection saved!" } -# Delete a connection +# Delete connection delete_connection() { - send_stats "Delete a connection" - read -e -p "Please enter the connection number to delete:" num + send_stats "Delete connection" + 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 @@ -5886,7 +5886,7 @@ delete_connection() { fi sed -i "${num}d" "$CONFIG_FILE" - echo "The connection has been deleted!" + echo "Connection deleted!" } # Use connection @@ -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 @@ -5904,16 +5904,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:" @@ -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 @@ -5938,7 +5938,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 @@ -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 mount_partition() { - send_stats "Mount the partition" - read -e -p "Please enter the partition name to be mounted (for example, sda1):" 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 if ! lsblk -o NAME | grep -w "$PARTITION" > /dev/null; then @@ -5997,47 +5997,47 @@ 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 - # 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 - 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 - 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 } @@ -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 @@ -6058,19 +6058,19 @@ 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 uninstall it first!" + echo "The partition has been mounted, please unmount it first!" return fi - # Select a file system type - echo "Please select the file system type:" + # Select file system type + echo "Please select a 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 @@ -6092,7 +6092,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,26 +6110,26 @@ check_partition() { fi # Check partition status - echo "Check partition /dev/$PARTITIONStatus:" + echo "Check partition /dev/$PARTITIONstatus:" 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 "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 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. Mount the partition 2. Unmount the partition 3. View the mounted partition" + echo "4. Format partition 5. Check 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 ;; @@ -6147,49 +6147,49 @@ 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 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 "- 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 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} - 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 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 - # 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 @@ -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 @@ -6227,13 +6227,13 @@ add_task() { install rsync rsync - echo "Task saved!" + echo "Mission saved!" } -# Delete a task +# Delete 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!" } @@ -6259,7 +6259,7 @@ run_task() { CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" - # Analyze parameters + # Parse parameters local direction="push" # 默认是推送到远端 local num @@ -6270,7 +6270,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,13 +6283,13 @@ 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 - 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 @@ -6309,12 +6309,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 @@ -6322,20 +6322,20 @@ 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 "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 timed task +# 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 @@ -6343,9 +6343,9 @@ schedule_task() { return fi - echo "Please select the timed execution interval:" - echo "1) Execute once an hour" - echo "2) Perform once a day" + echo "Please select the scheduled execution interval:" + echo "1) Execute once every hour" + echo "2) Execute 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,38 +6363,38 @@ 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 - # 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" + echo "Scheduled task has been created:$cron_job" } # View scheduled tasks view_tasks() { - echo "Current timing tasks:" + echo "Current scheduled tasks:" echo "---------------------------------" crontab -l | grep "k rsync_run" 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 + 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!" return fi crontab -l | grep -v "k rsync_run $num" | crontab - - echo "Deleted task number$numTiming tasks" + echo "Task number deleted$numscheduled tasks" } -# Task Management Main Menu +# Task management main menu rsync_manager() { CONFIG_FILE="$HOME/.rsync_tasks" CRON_FILE="$HOME/.rsync_cron" @@ -6402,19 +6402,19 @@ 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 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 "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" 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 ;; @@ -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}-------------" @@ -6501,14 +6501,14 @@ 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}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 +6521,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,39 +6537,39 @@ 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 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}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 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}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}" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" 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 "The tool has been installed and is used as follows:" curl --help send_stats "Install curl" ;; @@ -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,15 +6585,15 @@ 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 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 +6615,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 +6631,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" ;; @@ -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 ;; @@ -6767,13 +6767,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,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 @@ -6864,14 +6864,14 @@ docker_ssh_migration() { # ---------------------------- - # Backup + # backup # ---------------------------- 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 + 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 @@ -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$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') @@ -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] Backed up, skip duplicate packaging...${NC}" + echo -e "${YELLOW}Compose project [$project_name] Already backed up, skip repeated 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}" + echo -e "${GREEN}Compose project [$project_name] Packaged:${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,16 +6942,16 @@ 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 - # 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,15 +6961,15 @@ 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}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}" + echo -e "${GREEN}Files under /home/docker have 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,46 +6981,46 @@ 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 - # ------------------------- + # --------- Prioritize restoring Compose projects --------- 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 "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 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 - 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" 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 @@ -7030,28 +7030,28 @@ 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; } + [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}Mirror information 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 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 @@ -7069,25 +7069,25 @@ 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 - # 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 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 + # Restore files 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 @@ -7100,7 +7100,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 @@ -7110,9 +7110,9 @@ 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 a key + # Log in using key scp -P "$TARGET_PORT" -o StrictHostKeyChecking=no -r "$LATEST_TAR" "$TARGET_USER@$TARGET_IP:/tmp/" fi @@ -7123,17 +7123,17 @@ 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" + send_stats "Docker backup migration restore" while true; do clear echo "------------------------" @@ -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" @@ -7174,32 +7174,32 @@ 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 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}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/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" 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) @@ -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,36 +7270,36 @@ 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 "4. Delete 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" - read -e -p "Set a new network name:" dockernetwork + send_stats "Create network" + read -e -p "Set new network name:" 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 "Join the network" + read -e -p "Add network name:" dockernetwork + 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 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,8 +7308,8 @@ linux_docker() { ;; 4) - send_stats "Delete the network" - read -e -p "Please enter the network name to delete:" dockernetwork + send_stats "delete network" + read -e -p "Please enter the network name to be deleted:" 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 + send_stats "Create new volume" + read -e -p "Set new volume name:" dockerjuan docker volume create $dockerjuan ;; @@ -7376,7 +7376,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]) @@ -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,35 +7466,35 @@ 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}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 Three-network backhaul line test" - echo -e "${gl_kjlan}13. ${gl_bai}Superspeed three-net speed measurement" + echo -e "${gl_kjlan}12. ${gl_bai}mtr_trace triple network backhaul line test" + 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}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}18. ${gl_bai}NetQuality network quality check 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" + 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,25 +7515,25 @@ 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) ;; 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 ;; 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 +7545,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" @@ -7554,30 +7554,30 @@ 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" 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 ;; 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 ;; 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 +7589,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) ;; @@ -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,44 +7636,44 @@ 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}5. ${gl_bai}Turn on ROOT password login mode" + echo -e "${gl_kjlan}4. ${gl_bai}Detective R startup script" + 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%" - read -e -p "Are you sure to install it? (Y/N):" choice + 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]) 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 + # 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 (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 + 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 +7706,13 @@ 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." - 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) @@ -7729,10 +7729,10 @@ 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" + send_stats "Oracle Cloud reinstall system script" ;; [Nn]) echo "Canceled" @@ -7745,7 +7745,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) @@ -7756,8 +7756,8 @@ 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 "This function is provided by jhb, thank him!" + send_stats "ipv6 repair" ;; 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}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 +7839,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}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}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 sharing 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 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}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 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}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 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 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}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}" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in @@ -7909,7 +7909,7 @@ linux_ldnmp() { 4) clear - # Kedao Cloud Desktop + # Kedao cloud desktop webname="可道云桌面" send_stats "Install$webname" echo "Start deployment$webname" @@ -7944,7 +7944,7 @@ linux_ldnmp() { 5) clear - # Apple CMS + # AppleCMS webname="苹果CMS" send_stats "Install$webname" echo "Start deployment$webname" @@ -7980,14 +7980,14 @@ 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" ;; 6) clear - # One-legged counting card + # One-legged number card webname="独脚数卡" send_stats "Install$webname" echo "Start deployment$webname" @@ -8018,24 +8018,24 @@ 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 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 "If a red error0 appears in the upper right corner when logging in, please use the following command:" + 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" ;; 7) clear - # Flarum Forum + # flarum forum webname="flarum论坛" send_stats "Install$webname" echo "Start deployment$webname" @@ -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" ;; @@ -8182,8 +8182,8 @@ 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" - 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}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 wget "$url_download" @@ -8198,15 +8198,15 @@ 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 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 @@ -8223,7 +8223,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 @@ -8237,14 +8237,14 @@ 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 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 @@ -8252,8 +8252,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 @@ -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" @@ -8336,7 +8336,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,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}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 wget "$url_download" @@ -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]) @@ -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,17 +8547,17 @@ 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) 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) 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 ;; *) @@ -8576,14 +8576,14 @@ 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 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 +8593,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 @@ -8602,7 +8602,7 @@ linux_ldnmp() { install_certbot install_ldnmp else - echo "No compression package was found." + echo "No compressed package found." fi ;; @@ -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 @@ -8650,7 +8650,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 @@ -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 @@ -8755,7 +8755,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]) @@ -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..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8813,71 +8813,71 @@ 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}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}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}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}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 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 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}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}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}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}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 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}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}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 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}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}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 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 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}83. ${color83}komari server monitoring tool${gl_kjlan}84. ${color84}Wallos personal financial management tools" + 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 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 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" + 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}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 @@ -9031,7 +9031,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 \ @@ -9073,9 +9073,9 @@ 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 "Nezha monitoring$check_docker $update_status" + echo "Open source, lightweight, easy-to-use server monitoring and operation and maintenance tool" + 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 @@ -9086,7 +9086,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) @@ -9153,8 +9153,8 @@ 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 -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" echo "" @@ -9164,13 +9164,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 @@ -9179,18 +9179,18 @@ 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) 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 "------------------------" 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" @@ -9257,7 +9257,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" ;; *) @@ -9291,7 +9291,7 @@ while true; do clear ip_address - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -9311,7 +9311,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 @@ -9395,7 +9395,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -9409,7 +9409,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 @@ -9554,7 +9554,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 @@ -9562,8 +9562,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 @@ -9571,11 +9571,11 @@ 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 "------------------------" - read -e -p "Enter your choice:" choice + read -e -p "Enter your selection:" choice case $choice in 1) @@ -9585,7 +9585,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 @@ -9598,7 +9598,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) @@ -9609,7 +9609,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" ;; *) @@ -9729,7 +9729,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 \ @@ -10070,7 +10070,7 @@ while true; do ;; 38|xiaoya) - send_stats "Xiaoya Family Bucket" + send_stats "Xiaoya family bucket" clear install_docker check_disk_space 1 @@ -10274,7 +10274,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" } @@ -10294,7 +10294,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 @@ -10381,7 +10381,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 ;; @@ -10501,7 +10501,7 @@ while true; do docker compose up -d clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -10516,7 +10516,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 @@ -10544,7 +10544,7 @@ while true; do docker compose up -d clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -10559,7 +10559,7 @@ while true; do docker compose up -d clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -10567,7 +10567,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 @@ -10588,7 +10588,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" @@ -10598,7 +10598,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" } @@ -10608,7 +10608,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 @@ -10655,7 +10655,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 } @@ -10671,7 +10671,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 @@ -10933,7 +10933,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 \ @@ -10968,8 +10968,8 @@ 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 "Set login user password:" admin_password + read -e -p "Enter authorization code:" shouquanma mkdir -p /home/docker/moontv @@ -10985,7 +10985,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -10999,7 +10999,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 @@ -11189,11 +11189,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 } @@ -11203,7 +11203,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11288,7 +11288,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 \ @@ -11392,7 +11392,7 @@ while true; do docker compose up -d clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -11405,7 +11405,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 @@ -11618,7 +11618,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -11632,7 +11632,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 @@ -11756,7 +11756,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -11770,7 +11770,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 @@ -11810,7 +11810,7 @@ while true; do block_container_port "$docker_name" "$ipv4_address" clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -11824,7 +11824,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 @@ -11842,9 +11842,9 @@ 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 + 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,) @@ -11914,17 +11914,17 @@ 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}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}${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 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 @@ -11953,12 +11953,12 @@ 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 + # initialize variables input="" empty_line_count=0 @@ -11975,10 +11975,10 @@ while true; do fi done - # Write to the configuration file + # Write 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 @@ -12026,7 +12026,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 @@ -12043,7 +12043,7 @@ while true; do docker compose up -d clear - echo "Installed" + echo "Installation completed" check_docker_app_ip } @@ -12057,7 +12057,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 @@ -12097,7 +12097,7 @@ while true; do 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}" @@ -12105,7 +12105,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]) @@ -12122,14 +12122,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 "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 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 @@ -12139,29 +12139,29 @@ 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 "" - 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 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 ;; @@ -12186,33 +12186,33 @@ 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 "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 "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 "${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}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}1. ${gl_bai}Work Area 1" + 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}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}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 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}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}" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in @@ -12220,7 +12220,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 ;; @@ -12228,63 +12228,63 @@ 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) clear install tmux local SESSION_NAME="work3" - send_stats "Start the workspace$SESSION_NAME" + send_stats "Start workspace$SESSION_NAME" tmux_run ;; 4) clear install tmux local SESSION_NAME="work4" - send_stats "Start the workspace$SESSION_NAME" + send_stats "Start workspace$SESSION_NAME" tmux_run ;; 5) 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) clear install tmux local SESSION_NAME="work7" - send_stats "Start the workspace$SESSION_NAME" + send_stats "Start workspace$SESSION_NAME" tmux_run ;; 8) 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 ;; @@ -12298,19 +12298,19 @@ 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 "------------------------" - 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 + 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 ;; @@ -12341,7 +12341,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) @@ -12374,53 +12374,53 @@ 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}Modify the 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}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 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}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 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}21. ${gl_bai}Native host resolution${gl_kjlan}22. ${gl_bai}SSH defense program" + 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}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 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}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 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) 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 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 "Shortcut keys have been set" + send_stats "Script shortcut key has been set" break_end linux_Settings done @@ -12441,21 +12441,21 @@ 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!" + 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 if [[ "$py_new_v" == "0" ]]; then - send_stats "Script PY Management" + send_stats "Script PY management" break_end linux_Settings fi @@ -12518,13 +12518,13 @@ 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" ;; 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" @@ -12541,13 +12541,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 @@ -12559,13 +12559,13 @@ 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." - send_stats "Invalid SSH port input" + echo "Invalid input, please enter a number." + send_stats "Invalid SSH port entered" break_end fi done @@ -12584,8 +12584,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 "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 linux_Settings @@ -12600,7 +12600,7 @@ EOF passwd -l root - echo "The operation has been completed." + echo "The operation is complete." ;; @@ -12621,11 +12621,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) @@ -12643,8 +12643,8 @@ EOF 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 "This function is provided by jhb, thank him!" + send_stats "ipv6 repair" ;; *) @@ -12672,11 +12672,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) @@ -12690,7 +12690,7 @@ EOF ;; 3) - send_stats "4G virtual memory has been set" + send_stats "4G virtual memory has been set up" add_swap 4096 ;; @@ -12698,7 +12698,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" ;; *) @@ -12711,8 +12711,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 @@ -12723,62 +12723,62 @@ EOF echo "" - echo "Account operation" + echo "Account operations" 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 "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice 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 + # 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 a new user and set a password + # 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 - echo "The operation has been completed." + echo "The operation is complete." ;; 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 ;; 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 + read -e -p "Please enter the username you want to delete:" username + # Delete users and their home directories userdel -r "$username" ;; @@ -12791,16 +12791,16 @@ 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 "" - 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") @@ -12822,11 +12822,11 @@ 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) - echo "Random password$i: $password" + echo "random password$i: $password" done echo "" @@ -12834,7 +12834,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 "" @@ -12858,30 +12858,30 @@ 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 "7. Dubai time in the UAE 8. Sydney time in Australia" - echo "9. Time in Bangkok, Thailand" + 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, 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 "13. Berlin time, Germany 14. Moscow time, Russia" - echo "15. Utrecht time in the Netherlands 16. Madrid time in Spain" + echo "11. London, UK time 12. Paris, France time" + echo "13. Berlin, Germany time 14. Moscow, Russia time" + echo "15. Utracht Time, Netherlands 16. Madrid Time, Spain" echo "------------------------" echo "America" - echo "21. Western Time 22. Eastern Time" - echo "23. Canadian time 24. Mexican time" + echo "21. US Western Time 22. US Eastern Time" + echo "23. Canada time 24. Mexico 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 "------------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in @@ -12924,21 +12924,21 @@ EOF 18) root_use - send_stats "Modify the host name" + send_stats "Modify hostname" 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 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 @@ -12956,11 +12956,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 "The hostname has been changed to:$new_hostname" + send_stats "Hostname changed" sleep 1 else - echo "Exited, hostname not changed." + echo "Exited without changing hostname." break fi done @@ -12968,28 +12968,28 @@ 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 "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) - send_stats "Default source in mainland China" + send_stats "Mainland China default source" 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) - send_stats "Overseas origin" + send_stats "Overseas sources" bash <(curl -sSL https://linuxmirrors.cn/main.sh) --abroad ;; *) @@ -13001,62 +13001,62 @@ 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 + read -e -p "Please enter your choice:" 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) - 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) - read -e -p "Choose when 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 ;; *) 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 # 跳出循环,退出菜单 @@ -13068,32 +13068,32 @@ EOF 21) root_use - send_stats "Local host parsing" + 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" 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) - 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) - 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" + send_stats "Local host resolution and deletion" ;; *) break # 跳出循环,退出菜单 @@ -13108,11 +13108,11 @@ EOF while true; do check_f2b_status - echo -e "SSH Defense Program$check_f2b_status" - echo "fail2ban is an SSH tool to prevent brute force" + 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 the defense program" + echo "1. Install a defense program" echo "------------------------" echo "2. View SSH interception records" echo "3. Real-time log monitoring" @@ -13121,7 +13121,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 @@ -13156,47 +13156,47 @@ EOF 23) root_use - send_stats "Current limit shutdown function" + send_stats "Current limiting 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 send:${gl_bai}$tx" + echo -e "${gl_kjlan}Total received:${gl_bai}$rx" + echo -e "${gl_kjlan}Total sent:${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 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 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 "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 - 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 + # 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 ~ @@ -13209,15 +13209,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 @@ -13236,29 +13236,29 @@ 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 "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) - send_stats "Generate a new key" + send_stats "Generate new key" add_sshkey break_end ;; 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 @@ -13279,18 +13279,18 @@ 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 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 "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 "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 @@ -13323,8 +13323,8 @@ 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 early warning system has been activated" + 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" @@ -13337,7 +13337,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 @@ -13404,8 +13404,8 @@ 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!" + send_stats "message board" + 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" ;; @@ -13414,26 +13414,26 @@ 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}" 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 -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 "------------------------------------------------" - 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" @@ -13459,7 +13459,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) @@ -13481,12 +13481,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}" ;; @@ -13518,32 +13518,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 function used," + 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 "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 "--------------------" - 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 "--------------------" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" 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 "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 @@ -13562,8 +13562,8 @@ 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" - read -e -p "Are you sure to continue? (Y/N):" choice + echo "The kejilion script will be completely uninstalled without affecting your other functions." + read -e -p "Are you sure you want to continue? (Y/N):" choice case "$choice" in [Yy]) @@ -13571,7 +13571,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 @@ -13608,87 +13608,87 @@ EOF linux_file() { root_use - send_stats "File Manager" + 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 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. 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 the directory" - send_stats "Go to the directory" + cd "$dirname" 2>/dev/null || echo "Unable to enter 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 - 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" ;; 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" + send_stats "Rename directory" ;; 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 "Please enter the directory name to be deleted:" dirname + rm -rf "$dirname" && echo "Directory deleted" || echo "Delete failed" + 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 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 renamed" || echo "Rename failed" - send_stats "Rename the file" + 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) # 压缩文件/目录 @@ -13698,65 +13698,65 @@ 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 "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 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 - 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" + echo "Error: Please enter destination path." + send_stats "Failed to move file or directory: Destination path not specified" 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 - 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 - # 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" ;; 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 @@ -13785,7 +13785,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" @@ -13797,7 +13797,7 @@ EOF 0) # 返回上一级选单 - send_stats "Return to the previous menu menu" + send_stats "Return to the previous menu" break ;; *) # 处理无效输入 @@ -13828,10 +13828,10 @@ 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" - # 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]} @@ -13861,30 +13861,30 @@ 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 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}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}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}------------------------${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 + 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} @@ -13894,12 +13894,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 ;; @@ -13907,15 +13907,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 ;; @@ -13946,8 +13946,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}" ;; @@ -13970,25 +13970,25 @@ 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}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 United States 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_lan}RackNerd $10.99 per year, USA, 1 core, 1G memory, 20G hard drive, 1T traffic per month${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_bai}Website: https://cart.hostinger.com/pay/d83c51e9-0c28-47a6-8414-b8ab010ef94f?_ga=GA1.3.942352702.1711283207${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}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_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_bai}Website: https://kejilion.pro/topvps/${gl_bai}" @@ -13996,13 +13996,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 "------------------------" @@ -14021,7 +14021,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 "------------------------" @@ -14030,11 +14030,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 "New version discovered!" + echo -e "Current version v$sh_vlatest version${gl_huang}v$sh_v_new${gl_bai}" fi @@ -14043,15 +14043,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 @@ -14086,15 +14086,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}Automatic updates are turned on, and the script will be automatically updated at 2 a.m. every day!${gl_bai}" + 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 ;; *) @@ -14117,36 +14117,36 @@ 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}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}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}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}" 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 ;; 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 ;; @@ -14161,7 +14161,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 ;; @@ -14175,58 +14175,58 @@ 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 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 "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 "Reinstall the system panel k dd | k Reinstall" +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 "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 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 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 "Software status view k status sshd | k status sshd" -echo "Software boot k enable docker | k autostart docke | k startup docker" +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 "Install the reverse proxy k fd |k rp |k anti-generation |k fd 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 "Application number quick management k app 26 | k app 1panel | k app npm" +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" } 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 @@ -14238,7 +14238,7 @@ else ;; remove|del|uninstall|卸载) shift - send_stats "Uninstall the software" + send_stats "Uninstall software" remove "$@" ;; update|更新) @@ -14272,7 +14272,7 @@ else rsync_run) shift - send_stats "Timed rsync synchronization" + send_stats "Scheduled rsync synchronization" run_task "$@" ;; @@ -14291,7 +14291,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" @@ -14358,7 +14358,7 @@ else status|状态) shift - send_stats "Software status view" + send_stats "Check software status" status "$@" ;; start|启动) @@ -14368,7 +14368,7 @@ else ;; stop|停止) shift - send_stats "Software pause" + send_stats "software pause" stop "$@" ;; restart|重启) @@ -14379,21 +14379,21 @@ 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" + send_stats "Apply for a certificate quickly" else k_info fi @@ -14411,7 +14411,7 @@ else docker_ps ;; img|镜像) - send_stats "Quick mirror management" + send_stats "Quick image management" docker_image ;; *) @@ -14438,7 +14438,7 @@ else app) shift - send_stats "Apply $@" + send_stats "Apply$@" linux_panel "$@" ;; diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 66380bbd3..bad225971 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}テクノロジー ライオン スクリプト ツールボックスへようこそ${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 @@ -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 "最小需要スペース:${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 @@ -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 @@ -261,14 +261,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" @@ -281,43 +281,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サービスが開始されました。" 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 } @@ -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 "続行するには任意のキーを押してください..." 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}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,47 +506,47 @@ 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 "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) @@ -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 ;; @@ -576,19 +576,19 @@ while true; do 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 "------------------------------------------------------------" @@ -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) @@ -622,8 +622,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) @@ -642,44 +642,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 "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]) @@ -688,7 +688,7 @@ while true; do [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "選択が無効です。Y または N を入力してください。" ;; esac ;; @@ -756,16 +756,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}" } @@ -777,27 +777,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 @@ -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ステータスを確認してください + # 現在の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,117 +872,117 @@ iptables_open() { open_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 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 "少なくとも 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 "少なくとも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 - # 許可ルールを追加します + # 許可ルールを追加する 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 save_iptables_rules - send_stats "IPブロック" + send_stats "IPがブロックされました" } @@ -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 @@ -1002,12 +1002,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 @@ -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 @@ -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,11 +1086,11 @@ manage_country_rules() { ipset destroy "$ipset_name" fi - echo "正常に持ち上げられました$country_codeIPアドレスの制限" + echo "正常に削除されました$country_codeIPアドレス制限" ;; *) - echo "使用法:manage_country_rules {block | lock | block} " + echo "使用法: manage_country_rules {block|allow|unblock} " ;; esac done @@ -1118,35 +1118,35 @@ 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 "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. 指定国における知的財産制限を解除する" 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 @@ -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,35 +1180,35 @@ 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 + # 指定した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 @@ -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 + 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,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 @@ -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 @@ -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}" @@ -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 @@ -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,12 +1449,12 @@ 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}" - 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 "" } @@ -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" @@ -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。ドメイン名スペリングエラー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 @@ -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,8 +1616,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}仕上げる" } @@ -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,29 +1650,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_FILECF 情報は後で変更できます。" + 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 "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 @@ -1696,28 +1696,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 @@ -1733,23 +1733,23 @@ 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をオンにしてください:コメントを削除します + # 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 @@ -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,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」で行の前に新しい定義を挿入する + # 「Happy Publishing」を含む行の前に新しい定義を挿入します。 awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /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,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,11 +1938,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 @@ -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,25 +1989,25 @@ 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。ウェブサイト傍受記録を見る" - echo "7。防衛ルールのリストを表示8。ログのリアルタイム監視を表示" + echo "5. SSH 傍受記録の表示 6. Web サイト傍受記録の表示" + echo "7. 防御ルールのリストを表示します。 8. リアルタイム監視のログを表示します。" echo "------------------------" - echo "11.インターセプトパラメーターを構成12。すべてのブロックされたipsをクリアします" + echo "11. インターセプトパラメータを設定します。 12. ブロックされたすべての IP をクリアします。" echo "------------------------" - echo "21。CloudFlareモード22。5秒シールドの高負荷" + echo "21. クラウドフレア モード 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 @@ -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モード" - echo "CF背景の右上隅に移動し、左側のAPIトークンを選択し、グローバルAPIキーを取得します" + 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 の口座番号を入力してください:" 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 @@ -2107,21 +2107,21 @@ 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}" + 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 -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 のグローバル API キーを入力します。" cftoken + read -e -p "CF にドメイン名のゾーン ID を入力します。" cfzonID cd ~ install jq bc @@ -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 ;; @@ -2153,8 +2153,8 @@ web_security() { 32) nginx_waf off - echo "サイトWAFは閉鎖されています" - send_stats "サイトWAFは閉鎖されています" + echo "サイト WAF がダウンしています" + send_stats "サイト WAF がダウンしています" ;; 33) @@ -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 @@ -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 @@ -2228,33 +2228,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 "サイト標準モード" - # 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 @@ -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,19 +2282,19 @@ web_optimization() { ;; 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 @@ -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 @@ -2316,7 +2316,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP環境は、高性能モードに設定されています" + echo "LDNMP 環境が高パフォーマンス モードに設定されている" ;; 3) @@ -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 # } @@ -2386,7 +2386,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "アクセスアドレス:" +echo "訪問先住所:" ip_address @@ -2424,31 +2424,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 +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,34 +2477,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 +2514,7 @@ block_container_port() { fi - echo "IP+ポートは、サービスへのアクセスをブロックされています" + echo "IP+ポートはサービスへのアクセスをブロックされています" save_iptables_rules } @@ -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 @@ -2554,17 +2554,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 +2575,7 @@ clear_container_rules() { fi - echo "IP+ポートはサービスにアクセスすることが許可されています" + echo "IP+ポートによるサービスへのアクセスが許可されました" save_iptables_rules } @@ -2589,25 +2589,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 +2616,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 +2648,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,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,12 +2786,12 @@ while true; do 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,19 +2860,19 @@ 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 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,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,7 +2995,7 @@ tmux_run_d() { local base_name="tmuxd" local tmuxd_ID=1 -# セッションが存在するかどうかを確認する関数 +# セッションが存在するかどうかを確認する機能 session_exists() { tmux has-session -t $1 2>/dev/null } @@ -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 @@ -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,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 @@ -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,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" } @@ -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,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,13 +3281,13 @@ ldnmp_Proxy_backend() { reverseproxy_port="${2:-}" send_stats "インストール$webname" - echo "展開を開始します$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 @@ -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 @@ -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 "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 @@ -3395,15 +3395,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') @@ -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" {} + @@ -3442,10 +3442,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 @@ -3459,25 +3459,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 @@ -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 "公式ウェブサイトの紹介:$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 @@ -3554,7 +3554,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 @@ -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,17 +3620,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パネルアドレス:http://$ipv4_address:$dashboard_port" + echo "FRP パネルのユーザー名:$dashboard_user" + echo "FRPパネルのパスワード:$dashboard_pwd" echo open_port 8055 8056 @@ -3640,9 +3640,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 echo mkdir -p /home/frp @@ -3662,17 +3662,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 を入力してください [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 + 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 @@ -3694,12 +3694,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_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="" @@ -3772,7 +3772,7 @@ list_forwarding_services() { } END { - # 最後のサービスの情報を印刷します + # 最後のサービスに関する情報を出力します 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 @@ -3824,7 +3824,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}" @@ -3860,24 +3860,24 @@ frps_panel() { 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 "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 @@ -3885,7 +3885,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 +3895,7 @@ frps_panel() { donlond_frp frps add_app_id - echo "FRPサーバーが更新されました" + echo "FRPサーバーを更新しました" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3906,37 +3906,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サービスステータスが更新されました" ;; *) @@ -3958,9 +3958,9 @@ frpc_panel() { 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 "サーバーに接続します。接続後、インターネットにアクセスするためのイントラネット侵入サービスを作成できます。" + 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 @@ -3968,13 +3968,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 @@ -4003,7 +4003,7 @@ frpc_panel() { close_port 8055 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" ;; 4) @@ -4049,68 +4049,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 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のアンインストール..." - 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 \ @@ -4118,31 +4118,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 + 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 + 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" ;; *) @@ -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 @@ -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 @@ -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,11 +4243,11 @@ 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 "一時ファイルを削除します..." rm -rf /tmp/* @@ -4267,23 +4267,23 @@ 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 "システムログを削除してください..." + echo "システムログを削除します..." rm -rf /var/log/* echo "一時ファイルを削除します..." rm -rf /tmp/* else - echo "不明なパッケージマネージャー!" + echo "不明なパッケージマネージャーです!" return fi return @@ -4327,26 +4327,26 @@ 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構成を手動で編集します" + 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" @@ -4354,7 +4354,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,14 +4362,14 @@ 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 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" @@ -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 @@ -4460,17 +4460,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 @@ -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}" } @@ -4497,26 +4497,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 @@ -4527,41 +4527,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" @@ -4577,21 +4577,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 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 + 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,49 +4599,49 @@ 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 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 @@ -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 @@ -4666,7 +4666,7 @@ dd_xitong() { ;; 23) - send_stats "alma10を再インストールします" + send_stats "alma10を再インストールする" dd_xitong_3 bash reinstall.sh almalinux 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 @@ -4714,7 +4714,7 @@ dd_xitong() { ;; 29) - send_stats "CENTOS10を再インストールします" + send_stats "centos10を再インストールする" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4722,7 +4722,7 @@ dd_xitong() { ;; 30) - send_stats "CENTOS9を再インストールします" + send_stats "centos9を再インストールする" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4730,7 +4730,7 @@ dd_xitong() { ;; 31) - send_stats "アルパインを再インストールします" + send_stats "アルパインを再インストールする" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4738,7 +4738,7 @@ dd_xitong() { ;; 32) - send_stats "アーチを再インストールします" + send_stats "アーチを再インストールする" dd_xitong_3 bash reinstall.sh arch reboot @@ -4746,7 +4746,7 @@ dd_xitong() { ;; 33) - send_stats "Kaliを再インストールします" + send_stats "kaliを再インストールする" dd_xitong_3 bash reinstall.sh kali reboot @@ -4754,7 +4754,7 @@ dd_xitong() { ;; 34) - send_stats "Openeulerを再インストールします" + send_stats "オープニューラーを再インストールする" dd_xitong_3 bash reinstall.sh openeuler 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 @@ -4802,7 +4802,7 @@ dd_xitong() { ;; 44) - send_stats "Windows Server 25を再インストールします" + send_stats "Windowsサーバー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 "Windowsサーバー22を再インストールします" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" 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 @@ -4826,7 +4826,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 +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 "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,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 "Debian/Ubuntu のみをサポートします" + 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+') @@ -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 @@ -4968,40 +4968,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 +5009,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 Kernelをインストールしました" - echo "現在のカーネルバージョン:$kernel_version" + echo "elrepo カーネルがインストールされています" + 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 + 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,26 +5052,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 "続行してもよろしいですか? (はい/いいえ):" choice case "$choice" in [Yy]) check_swap elrepo_install - send_stats "Red Hatカーネルをアップグレードします" + send_stats "Red Hat カーネルをアップグレードする" server_reboot ;; [Nn]) echo "キャンセル" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "選択が無効です。Y または N を入力してください。" ;; esac fi @@ -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 \ @@ -5096,15 +5096,15 @@ clamav_scan() { return fi - echo -e "${gl_huang}スキャンディレクトリ$@...${gl_bai}" + 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 +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 \ @@ -5122,8 +5122,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}" } @@ -5138,20 +5138,20 @@ 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 -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 +5160,7 @@ clamav() { ;; 2) - 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 "スペースで区切られたスキャンにディレクトリを入力してください(例: /etc /var /usr /home /root):" directories + read -e -p "スキャンするディレクトリをスペースで区切って入力してください (例: /etc /var /usr /home /root):" directories install_docker clamav_freshclam clamav_scan $directories @@ -5186,9 +5186,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 @@ -5219,15 +5219,15 @@ 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バランスを無効にします + # NUMA バランシングを無効にする sysctl -w kernel.numa_balancing=0 2>/dev/null } -# イコライゼーションモード最適化関数 +# バランスモード最適化機能 optimize_balanced() { echo -e "${gl_lv}イコライゼーションモードに切り替えます...${gl_bai}" @@ -5260,17 +5260,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 +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}ネットワーク設定を復元します...${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 @@ -5300,19 +5300,19 @@ 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バランスを復元します + # NUMA バランスを復元する sysctl -w kernel.numa_balancing=1 2>/dev/null } -# ウェブサイトの構築最適化機能 +# 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,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 @@ -5357,29 +5357,29 @@ Kernel_optimize() { while true; do clear send_stats "Linuxカーネルチューニング管理" - echo "Linuxシステムにおけるカーネルパラメーターの最適化" - echo "ビデオの紹介:https://www.bilibili.com/video/bv1kb421j7yg?t=0.1" + 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. Web サイト最適化モード: 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 ~ @@ -5391,14 +5391,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 ~ @@ -5411,7 +5411,7 @@ Kernel_optimize() { cd ~ clear restore_defaults - send_stats "デフォルト設定を復元します" + send_stats "デフォルト設定を復元する" ;; *) break @@ -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}システム言語は次のように変更されました。$lang有効にするには、SSH に再接続します。${gl_bai}" hash -r break_end @@ -5447,17 +5447,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 +5467,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 +5511,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 +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}#" @@ -5535,9 +5535,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 +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 "有効になった後、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 +5615,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 +5623,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ホームディレクトリに復元されました。" 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 ;; *) @@ -5654,19 +5654,19 @@ 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 "- Enter キーを押して、デフォルトのディレクトリ (/etc /usr /home) を使用します。" + read -r -p "バックアップするディレクトリを入力してください (複数のディレクトリをスペースで区切って、Enter キーを押してデフォルトのディレクトリを使用します)。" input - # ユーザーがディレクトリを入力しない場合は、デフォルトのディレクトリを使用します + # ユーザーがディレクトリを入力しない場合は、デフォルトのディレクトリが使用されます。 if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -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 "バックアップを復元します" - # 復元するバックアップを選択します - 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 } @@ -5775,18 +5775,18 @@ linux_backup() { 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 "続行するには Enter キーを押してください..." done } @@ -5798,56 +5798,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 "キーの内容を貼り付けてください (貼り付け後に 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" @@ -5856,77 +5856,77 @@ 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 } @@ -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 @@ -5951,20 +5951,20 @@ 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 + read -e -p "選択肢を入力してください:" choice case $choice in 1) add_connection ;; 2) use_connection ;; 3) delete_connection ;; 0) break ;; - *) echo "無効な選択、もう一度やり直してください。" ;; + *) echo "選択が無効です。もう一度お試しください。" ;; esac done } @@ -5980,137 +5980,137 @@ 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" } @@ -6119,17 +6119,17 @@ disk_manager() { 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 ;; @@ -6138,64 +6138,64 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "Enterを押して続行します..." + 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 "- リモートディレクトリ: /バックアップ /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 "キーの内容を貼り付けてください (貼り付け後に 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 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,63 +6203,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 @@ -6270,51 +6270,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 @@ -6322,32 +6322,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) 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="" @@ -6355,42 +6355,42 @@ 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スケジュールされたタスク" } @@ -6401,20 +6401,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 "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 ;; @@ -6423,9 +6423,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "無効な選択、もう一度やり直してください。" ;; + *) echo "選択が無効です。もう一度お試しください。" ;; esac - read -e -p "Enterを押して続行します..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -6440,7 +6440,7 @@ rsync_manager() { linux_info() { clear - send_stats "システム情報クエリ" + send_stats "システム情報の問い合わせ" ip_address @@ -6490,41 +6490,41 @@ 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" - 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" 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 @@ -6537,111 +6537,111 @@ 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 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}カールダウンロードツール${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}レンジャーファイル管理ツール" + 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 "カールをインストールします" + 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 "タールをインストールします" + 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 @@ -6658,7 +6658,7 @@ linux_tools() { clear ranger cd ~ - send_stats "レンジャーをインストールします" + send_stats "レンジャーをインストールする" ;; 13) clear @@ -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 @@ -6694,7 +6694,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "ナノをインストールします" + send_stats "ナノをインストールする" ;; @@ -6705,7 +6705,7 @@ linux_tools() { clear git --help cd ~ - send_stats "gitをインストールします" + send_stats "gitをインストールする" ;; 21) @@ -6713,67 +6713,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 "バステトをインストールする" ;; 27) clear install nsnake clear nsnake - send_stats "nsnakeをインストールします" + send_stats "nsnakeをインストールする" ;; 28) clear 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 ;; 41) clear - read -e -p "インストールされているツール名(Wget Curl Sudo htop)を入力してください。" installname + read -e -p "インストールされているツール名 (wgetcurlsudohtop) を入力してください:" 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) @@ -6781,7 +6781,7 @@ linux_tools() { ;; *) - echo "無効な入力!" + echo "無効な入力です!" ;; esac break_end @@ -6801,21 +6801,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 "アルパインが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 "バックアップなし" } @@ -6869,9 +6869,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 @@ -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,28 +6892,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}検出されました$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}" + echo -e "${YELLOW}プロジェクトの作成 [$project_name] すでにバックアップされているので、繰り返しのパッケージ化をスキップします...${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 復元:$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 @@ -6955,22 +6955,22 @@ 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}" + 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}" } @@ -6980,62 +6980,62 @@ docker_ssh_migration() { # ---------------------------- restore_docker() { - send_stats "Dockerの復元" - read -e -p "復元するには、バックアップディレクトリを入力してください。" BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリは存在しません${NC}"; return; } + send_stats "Docker の復元" + 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 + 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}通常の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="" @@ -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,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 "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 @@ -7095,61 +7095,61 @@ 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 "移行するバックアップ ディレクトリを入力してください:" 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" - 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; } + 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}" } # ---------------------------- # メインメニュー # ---------------------------- 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 -e -p "選択してください:" choice + read -e -p "選択してください:" choice case $choice in 1) backup_docker ;; 2) migrate_docker ;; @@ -7173,38 +7173,38 @@ 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}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}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 ;; @@ -7215,22 +7215,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 のバージョン" 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 "" @@ -7270,36 +7270,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 @@ -7308,8 +7308,8 @@ linux_docker() { ;; 4) - send_stats "ネットワークを削除します" - read -e -p "削除するには、ネットワーク名を入力してください。" dockernetwork + send_stats "ネットワークを削除する" + read -e -p "削除するネットワーク名を入力してください:" dockernetwork docker network rm $dockernetwork ;; @@ -7323,29 +7323,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 + 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 +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]) @@ -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,13 +7385,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) ;; @@ -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,140 +7462,140 @@ 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}リージョンストリーミングメディアロック解除テスト" + 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}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 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}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}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}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 "リージョンストリーミングメディアロック解除テスト" bash <(curl -L -s check.unlock.media) ;; 3) clear - send_stats "YeahWUストリーミングメディアのロック解除検出" + send_stats "Yeawu ストリーミング メディアのロック解除の検出" 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 "超高速トリプルネットワーク速度テスト" 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 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 "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 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 +7616,7 @@ linux_test() { ;; *) - echo "無効な入力!" + echo "無効な入力です!" ;; esac break_end @@ -7632,51 +7632,51 @@ 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}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 "インストールしてもよろしいですか? (はい/いいえ):" 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 "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" \ @@ -7684,14 +7684,14 @@ linux_Oracle() { -e MEM_UTIL="$mem_util" \ -e SPEEDTEST_INTERVAL="$speedtest_interval" \ fogforest/lookbusy - send_stats "Oracle Cloudインストールアクティブスクリプト" + send_stats "Oracle Cloudインストール・アクティブ・スクリプト" ;; [Nn]) ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "選択が無効です。Y または N を入力してください。" ;; esac ;; @@ -7699,20 +7699,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.Ubuntu20.04:" sys_choice case "$sys_choice" in 1) @@ -7724,12 +7724,12 @@ 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再インストールシステムスクリプト" @@ -7738,14 +7738,14 @@ linux_Oracle() { echo "キャンセル" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "選択が無効です。Y または N を入力してください。" ;; esac ;; 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) @@ -7756,15 +7756,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 +7785,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 +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 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}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}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 軽量ブログ 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}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 +7872,10 @@ linux_ldnmp() { 3) clear - # ディスクフォーラム + # ディスカスフォーラム webname="Discuz论坛" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7898,21 +7898,21 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:mysql" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" + echo "データベースアドレス: mysql" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" - echo "テーブルプレフィックス:discuz_" + echo "テーブル接頭辞: discuz_" ;; 4) clear - # Kedao Cloudデスクトップ + # Kedao クラウド デスクトップ webname="可道云桌面" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7934,20 +7934,20 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "データベースアドレス:mysql" - echo "ユーザー名:$dbuse" + echo "データベースアドレス: mysql" + echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" - echo "データベース名:$dbname" - echo "Redisホスト:Redis" + echo "データベース名:$dbname" + echo "redisホスト: redis" ;; 5) clear - # Apple CMS + # AppleCMS webname="苹果CMS" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7973,24 +7973,24 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:mysql" - echo "データベースポート:3306" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" + echo "データベースアドレス: mysql" + echo "データベースポート: 3306" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" - echo "データベースプレフィックス:mac_" + echo "データベース接頭辞: mac_" echo "------------------------" - echo "インストールが成功した後、バックグラウンドアドレスにログインします" + echo "インストールが成功したら、バックエンド アドレスにログインします。" echo "https://$yuming/vip.php" ;; 6) clear - # 一本足のカウントカード + # 一本足のナンバーカード webname="独脚数卡" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8011,24 +8011,24 @@ 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パスワード:デフォルトで記入されていません" - 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 "ユーザー名: 管理者" + 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" ;; @@ -8038,7 +8038,7 @@ linux_ldnmp() { # フララムフォーラム webname="flarum论坛" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8075,12 +8075,12 @@ linux_ldnmp() { ldnmp_web_on - echo "データベースアドレス:mysql" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" + echo "データベースアドレス: mysql" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" - echo "テーブルプレフィックス:flarum_" - echo "管理者情報は自分で設定されます" + 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" ;; @@ -8127,7 +8127,7 @@ linux_ldnmp() { # LinkStack webname="LinkStack" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8152,10 +8152,10 @@ linux_ldnmp() { clear ldnmp_web_on - echo "データベースアドレス:mysql" - echo "データベースポート:3306" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" + echo "データベースアドレス: mysql" + echo "データベースポート: 3306" + echo "データベース名:$dbname" + 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 @@ -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-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" @@ -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,15 +8217,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 +8235,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 で終わる圧縮パッケージである必要があります。 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 "データベースのインポートが完了しました" @@ -8278,12 +8278,12 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" - echo "データベースアドレス:mysql" - echo "データベース名:$dbname" - echo "ユーザー名:$dbuse" + echo "データベースアドレス: mysql" + echo "データベース名:$dbname" + echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" - echo "テーブルプレフィックス:$prefix" - echo "管理者ログイン情報は自分で設定されます" + echo "テーブルの接頭辞:$prefix" + 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 @@ -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" @@ -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 + echo -e "ドメイン名の形式:${gl_huang}google.com${gl_bai}" + read -e -p "リバース プロキシ ドメイン名を入力してください:" fandai_yuming nginx_install_status install_ssltls certs_status @@ -8357,7 +8357,7 @@ linux_ldnmp() { clear webname="Bitwarden" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming nginx_install_status install_ssltls @@ -8380,7 +8380,7 @@ linux_ldnmp() { clear webname="halo" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_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 @@ -8432,7 +8432,7 @@ linux_ldnmp() { clear webname="静态站点" send_stats "インストール$webname" - echo "展開を開始します$webname" + echo "導入を開始する$webname" add_yuming repeat_add_yuming nginx_install_status @@ -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-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,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 @@ -8492,23 +8492,23 @@ 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 "バックアップ データをリモート サーバーに転送しますか? (はい/いいえ):" 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 /home/*.tar.gz | head -1) @@ -8516,9 +8516,9 @@ 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 "転送されるファイルは見つかりませんでした。" + echo "転送するファイルが見つかりませんでした。" fi break ;; @@ -8526,7 +8526,7 @@ linux_ldnmp() { break ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "選択が無効です。Y または N を入力してください。" ;; esac done @@ -8534,9 +8534,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 @@ -8546,18 +8546,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 ;; *) @@ -8571,19 +8571,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 "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 @@ -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 ;; @@ -8620,11 +8620,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,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 "5. 環境全体を更新する" echo "------------------------" - echo "0。前のメニューに戻ります" + 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など)(最新バージョンを取得するには入力):" version + read -e -p "入力してください${ldnmp_pods}バージョン番号 (例: 8.0 8.3 8.4 9.0) (Enter キーを押して最新バージョンを取得します):" 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" - 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) (Enter キーを押して最新バージョンを取得します):" version local version=${version:-8.3} cd /home/web/ cp /home/web/docker-compose.yml /home/web/docker-compose1.yml @@ -8709,8 +8709,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 +8721,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 @@ -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]) @@ -8769,7 +8769,7 @@ linux_ldnmp() { ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "選択が無効です。Y または N を入力してください。" ;; esac ;; @@ -8779,7 +8779,7 @@ linux_ldnmp() { ;; *) - echo "無効な入力!" + echo "無効な入力です!" esac break_end @@ -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..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8813,71 +8813,71 @@ 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 リモート デスクトップ 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}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 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 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}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}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}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}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 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 ホスト 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 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ツールツールボックス" + 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}------------------------" - 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}メロディー音楽の魔法使い${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 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}イミッチピクチャービデオマネージャー${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}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}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}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 @@ -9030,8 +9030,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,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "ネザを作る" + send_stats "ネザを構築する" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,20 +9073,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 "公式 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 "0. 前のメニューに戻る" echo "------------------------" - read -e -p "あなたの選択を入力してください:" choice + read -e -p "選択内容を入力してください:" choice case $choice in 1) @@ -9143,7 +9143,7 @@ while true; do ;; 9|mail) - send_stats "郵便局を建設します" + send_stats "郵便局を建てる" clear install telnet local app_id="9" @@ -9153,44 +9153,44 @@ 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 "ポート検出" 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 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) 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" @@ -9200,7 +9200,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "任意のキーを押して続行します..." + echo "続行するには任意のキーを押してください..." read -n 1 -s -r -p "" install jq @@ -9219,9 +9219,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 "" @@ -9244,9 +9244,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 "" ;; @@ -9257,7 +9257,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" ;; *) @@ -9291,7 +9291,7 @@ while true; do clear ip_address - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -9301,7 +9301,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 } @@ -9311,7 +9311,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" } docker_app_plus @@ -9395,7 +9395,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -9409,7 +9409,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 @@ -9554,7 +9554,7 @@ while true; do ;; 19|safeline) - send_stats "サンダープールを構築します" + send_stats "雷のプールを作る" local app_id="19" local docker_name=safeline-mgt @@ -9563,19 +9563,19 @@ 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 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) @@ -9585,7 +9585,7 @@ while true; do add_app_id clear - echo "サンダープールWAFパネルがインストールされています" + echo "Leichi WAFパネルを導入しました" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9598,7 +9598,7 @@ while true; do add_app_id clear - echo "サンダープールWAFパネルが更新されました" + echo "Leichi WAF パネルが更新されました" check_docker_app_ip ;; 3) @@ -9609,7 +9609,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" ;; *) @@ -9728,8 +9728,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 \ @@ -10017,7 +10017,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" @@ -10070,7 +10070,7 @@ while true; do ;; 38|xiaoya) - send_stats "Xiaoyaファミリーバケット" + send_stats "シャオヤファミリーバケツ" clear install_docker check_disk_space 1 @@ -10274,9 +10274,9 @@ while true; do prometheus_install clear ip_address - echo "インストール" + echo "インストール完了" check_docker_app_ip - echo "最初のユーザー名とパスワードは次のとおりです" + echo "初期のユーザー名とパスワードは次のとおりです: admin" } docker_app_update() { @@ -10294,7 +10294,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" } docker_app_plus @@ -10381,7 +10381,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 ;; @@ -10501,7 +10501,7 @@ while true; do docker compose up -d clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -10516,7 +10516,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 @@ -10544,7 +10544,7 @@ while true; do docker compose up -d clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -10559,7 +10559,7 @@ while true; do docker compose up -d clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -10567,7 +10567,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 @@ -10588,10 +10588,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" } @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "アプリはアンインストールされています" + echo "アプリがアンインストールされました" } docker_app_plus @@ -10655,7 +10655,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 } @@ -10671,7 +10671,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 @@ -10933,7 +10933,7 @@ while true; do docker_rum() { - read -e -p "libretvログインパスワードを設定します。" app_passwd + read -e -p "LibreTV のログイン パスワードを設定します。" app_passwd docker run -d \ --name libretv \ @@ -10967,9 +10967,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 @@ -10985,7 +10985,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -10999,7 +10999,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 @@ -11072,8 +11072,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 \ @@ -11170,11 +11170,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) @@ -11183,17 +11183,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 } @@ -11203,7 +11203,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11288,7 +11288,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 \ @@ -11392,7 +11392,7 @@ while true; do docker compose up -d clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -11405,7 +11405,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 @@ -11566,7 +11566,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 @@ -11618,7 +11618,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -11632,7 +11632,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 @@ -11707,8 +11707,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} \ @@ -11756,7 +11756,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -11770,7 +11770,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 @@ -11810,7 +11810,7 @@ while true; do block_container_port "$docker_name" "$ipv4_address" clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -11824,7 +11824,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 @@ -11842,9 +11842,9 @@ 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 + read -e -p "WireGuard ネットワーク セグメントを入力してください (デフォルトは 10.13.13.0)。" NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11914,18 +11914,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}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 をダウンロードし、上の 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 } @@ -11953,16 +11953,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++)) @@ -11975,10 +11975,10 @@ while true; do fi done - # 構成ファイルに書き込みます + # 設定ファイルの書き込み echo "$input" > "$CONFIG_FILE" - echo "クライアントの構成が保存されています$CONFIG_FILE" + echo "クライアント設定の保存場所$CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12023,10 +12023,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 @@ -12043,7 +12043,7 @@ while true; do docker compose up -d clear - echo "インストール" + echo "インストール完了" check_docker_app_ip } @@ -12057,7 +12057,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 @@ -12097,24 +12097,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" - read -e -p "バックアップデータをリモートサーバーに転送しますか? (y/n):" choice + echo "バックアップファイルが作成されました: /$backup_filename" + read -e -p "バックアップ データをリモート サーバーに転送しますか? (はい/いいえ):" 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) @@ -12122,14 +12122,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 @@ -12139,29 +12139,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 "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 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 ;; @@ -12186,33 +12186,33 @@ linux_work() { clear send_stats "バックエンドワークスペース" echo -e "バックエンドワークスペース" - echo -e "このシステムは、バックエンドで実行できるワークスペースを提供し、長期タスクを実行するために使用できます。" - echo -e "SSHを切断したとしても、ワークスペースのタスクは中断されず、バックグラウンドのタスクが居住します。" - echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入った後、Ctrl+Bを使用してDを押してワークスペースを終了します!" + 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}ワークスペース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" + 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}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 @@ -12220,7 +12220,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "ワークスペースを開始します$SESSION_NAME" + send_stats "ワークスペースの開始$SESSION_NAME" tmux_run ;; @@ -12228,63 +12228,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 ;; @@ -12298,19 +12298,19 @@ 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 "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 ;; @@ -12326,29 +12326,29 @@ linux_work() { ;; 22) - read -e -p "1001 KJ001 Work1など、作成または入力したワークスペースの名前を入力してください。" SESSION_NAME + read -e -p "作成または入力したワークスペースの名前を入力してください (1001 kj001 work1 など)。" SESSION_NAME tmux_run 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 @@ -12373,54 +12373,54 @@ 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}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}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}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 + 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 @@ -12428,34 +12428,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 @@ -12488,7 +12488,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 @@ -12517,14 +12517,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 "すべてのポートが開いています" @@ -12532,40 +12532,40 @@ 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}" + # 現在の 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ポートが変更されました" 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 @@ -12584,8 +12584,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 @@ -12600,51 +12600,51 @@ 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 "------------------------" 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 "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の優先度に切り替えました" + 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修正" + echo "この機能は jhb によって提供されています。ありがとう!" + send_stats "IPv6修復" ;; *) @@ -12662,43 +12662,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 "カスタム仮想メモリセット" ;; *) @@ -12725,60 +12725,60 @@ EOF 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" ;; @@ -12791,21 +12791,21 @@ 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[@]})) @@ -12814,15 +12814,15 @@ 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 "" - 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) @@ -12830,7 +12830,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) @@ -12842,46 +12842,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 "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 "11. ロンドン、イギリス時間 12. パリ、フランス時間" + echo "13. ベルリン、ドイツ時間 14. モスクワ、ロシア時間" + echo "15. ユトラハト時間、オランダ 16. マドリッド時間、スペイン" echo "------------------------" echo "アメリカ" - echo "21。WesternTime22。東部時間" - 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 @@ -12924,21 +12924,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 @@ -12956,11 +12956,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 @@ -12968,20 +12968,20 @@ EOF 19) root_use - send_stats "システムの更新ソースを変更します" + send_stats "システムアップデートソースを変更する" clear - echo "更新ソース領域を選択します" - echo "LinuxMirrorsに接続して、システム更新ソースを切り替えます" + echo "更新元リージョンの選択" + echo "LinuxMirror にアクセスしてシステム アップデート ソースを切り替える" 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) @@ -12989,7 +12989,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 ;; *) @@ -13001,62 +13001,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 # 跳出循环,退出菜单 @@ -13068,32 +13068,32 @@ EOF 21) root_use - send_stats "ローカルホストの解析" + send_stats "ローカルホストの解決" while true; do clear - echo "ネイティブホストのペルシングリスト" - 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 "ローカルホストの解析が追加されました" + send_stats "ローカルホスト解像度が追加されました" ;; 2) - read -e -p "削除する必要があるコンテンツの解析のキーワードを入力してください。" delhost + read -e -p "削除する必要がある解析済みコンテンツのキーワードを入力してください:" delhost sed -i "/$delhost/d" /etc/hosts - send_stats "ローカルホストの解析と削除" + send_stats "ローカルホストの解決と削除" ;; *) break # 跳出循环,退出菜单 @@ -13108,20 +13108,20 @@ EOF while true; do check_f2b_status - echo -e "SSH防衛プログラム$check_f2b_status" - echo "Fail2banは、ブルートフォースを防ぐためのSSHツールです" - echo "公式ウェブサイトの紹介:${gh_proxy}github.com/fail2ban/fail2ban" + echo -e "SSH防御プログラム$check_f2b_status" + echo "failed2ban はブルート フォース クラッキングを防ぐ 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) f2b_install_sshd @@ -13143,7 +13143,7 @@ EOF 9) remove fail2ban rm -rf /etc/fail2ban - echo "Fail2Ban防衛プログラムがアンインストールされています" + echo "Fail2Ban 防御プログラムがアンインストールされました" break ;; *) @@ -13160,43 +13160,43 @@ 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 "現在のトラフィックの使用、サーバートラフィックの計算の再起動がクリアされます!" + 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 "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 ~ @@ -13209,15 +13209,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 @@ -13230,40 +13230,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 "公開鍵情報" cat ~/.ssh/authorized_keys echo "------------------------" - echo "秘密のキー情報" + echo "秘密鍵情報" cat ~/.ssh/sshkey echo "------------------------" break_end @@ -13279,18 +13279,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 "ローカル CPU、メモリ、ハードディスク、トラフィック、SSH ログインのリアルタイム監視とアラートを実現するには、tg robot API とアラートを受信するユーザー ID を設定する必要があります。" + 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 @@ -13312,7 +13312,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 @@ -13323,21 +13323,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}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 @@ -13404,62 +13404,62 @@ 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 "2。システムジャンクファイルをクリーンアップします" - echo -e "3.仮想メモリを設定します${gl_huang}1G${gl_bai}" - echo -e "4. SSHポート番号をに設定します${gl_huang}5522${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 "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 "ワンクリックメンテナンスを実行してもよろしいですか? (はい/いいえ):" 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) @@ -13476,25 +13476,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 @@ -13519,31 +13519,31 @@ EOF fi echo "プライバシーとセキュリティ" - echo "スクリプトは、ユーザー機能に関するデータを収集し、スクリプトエクスペリエンスを最適化し、より楽しく便利な機能を作成します。" - echo "スクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、および使用される関数の名前を収集します。" + 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 @@ -13559,11 +13559,11 @@ EOF 102) clear - send_stats "テックライオンスクリプトをアンインストールします" - echo "テックライオンスクリプトをアンインストールします" + 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]) @@ -13571,7 +13571,7 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "スクリプトはアンインストールされています、さようなら!" + echo "スクリプトはアンインストールされました、さようなら!" break_end clear exit @@ -13580,7 +13580,7 @@ EOF echo "キャンセル" ;; *) - echo "無効な選択、yまたはnを入力してください。" + echo "選択が無効です。Y または N を入力してください。" ;; esac ;; @@ -13590,7 +13590,7 @@ EOF ;; *) - echo "無効な入力!" + echo "無効な入力です!" ;; esac break_end @@ -13618,174 +13618,174 @@ 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 "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 "圧縮に失敗しました" + 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}" + echo -e "${gl_lv}スクリプトが最新バージョンに更新されました。${gl_huang}v$sh_v_new${gl_bai}" send_stats "スクリプトは最新です$sh_v_new" break_end ~/kejilion.sh @@ -14086,15 +14086,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 ;; *) @@ -14116,41 +14116,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 "テクノロジー ライオン スクリプト ツールボックス 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}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}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 ;; 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 ;; @@ -14161,13 +14161,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 @@ -14175,70 +14175,70 @@ done k_info() { -send_stats "Kコマンド参照ユースケース" +send_stats "k コマンドのリファレンス例" echo "-------------------" -echo "ビデオの紹介:https://www.bilibili.com/video/bv1ib421e7it?t=0.1" -echo "以下は、Kコマンドリファレンスユースケースです。" +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 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 "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 "システム情報を表示k情報" +echo "パッケージをインストールします k install nano wget | k ナノ wget を追加 | nano wgetをインストールします" +echo "パッケージをアンインストールします。 k 削除 nano wget | kデルナノwget | nano wget をアンインストールする | nano wgetをアンインストールします" +echo "システム k アップデートを更新 | kアップデート" +echo "クリーン系ジャンククリーン |きれいだ" +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 "rsync リモート同期ツール k rsync | k リモート同期" +echo "ハードディスク管理ツール k ディスク | k ハードディスクの管理" +echo "イントラネット普及率 (サーバー) k frps" +echo "イントラネット浸透率 (クライアント) k frpc" +echo "ソフトウェア起動 k start sshd | 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 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 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 ロード バランシング |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 お気に入り | k コマンドのお気に入り" +echo "アプリケーションマーケット管理kアプリ" +echo "申請番号の迅速な管理 k app 26 | kアプリ1パネル | k アプリ npm" +echo "システム情報を表示 k info" } 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|更新) @@ -14272,7 +14272,7 @@ else rsync_run) shift - send_stats "タイム付きRSYNC同期" + send_stats "スケジュールされたrsync同期" run_task "$@" ;; @@ -14291,7 +14291,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" @@ -14304,13 +14304,13 @@ else swap) shift - send_stats "仮想メモリをすばやく設定します" + send_stats "仮想メモリをすばやくセットアップする" add_swap "$@" ;; time|时区) shift - send_stats "タイムゾーンをすばやく設定します" + send_stats "タイムゾーンを素早く設定" set_timedate "$@" ;; @@ -14358,12 +14358,12 @@ else status|状态) shift - send_stats "ソフトウェアステータスビュー" + send_stats "ソフトウェアのステータスを確認する" status "$@" ;; start|启动) shift - send_stats "ソフトウェアスタートアップ" + send_stats "ソフトウェアの起動" start "$@" ;; stop|停止) @@ -14379,14 +14379,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 @@ -14403,15 +14403,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 ;; *) @@ -14438,7 +14438,7 @@ else app) shift - send_stats "$@を適用します" + send_stats "申し込む$@" linux_panel "$@" ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 21b57de9f..23c7cf160 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}Tech Lion Script Toolbox에 오신 것을 환영합니다${gl_bai}" - echo "스크립트를 처음 사용하면 사용자 라이센스 계약을 읽고 동의하십시오." - echo "사용자 라이센스 계약 : https://blog.kejilion.pro/user-license-agreement/" + echo -e "${gl_kjlan}기술 사자 스크립트 도구 상자에 오신 것을 환영합니다${gl_bai}" + echo "스크립트를 처음 사용하는 경우 사용자 라이센스 계약을 읽고 동의하십시오." + 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 - 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 @@ -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 "현재 사용 가능한 공간 : $ ((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 @@ -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 @@ -261,14 +261,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" @@ -281,23 +281,23 @@ systemctl() { } -# 서비스를 다시 시작하십시오 +# 서비스 다시 시작 restart() { systemctl restart "$1" if [ $? -eq 0 ]; then echo "$1서비스가 다시 시작되었습니다." else - echo "오류 : 다시 시작합니다$1서비스가 실패했습니다." + echo "오류: 다시 시작$1서비스가 실패했습니다." fi } -# 서비스를 시작하십시오 +# 서비스 시작 start() { systemctl start "$1" if [ $? -eq 0 ]; then echo "$1서비스가 시작되었습니다." else - echo "오류 : 시작$1서비스가 실패했습니다." + echo "오류: 시작$1서비스가 실패했습니다." fi } @@ -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,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 @@ -506,59 +506,59 @@ while true; do 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]) @@ -567,28 +567,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 "------------------------------------------------------------" @@ -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) @@ -622,8 +622,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) @@ -648,38 +648,38 @@ 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 + 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]) @@ -688,7 +688,7 @@ while true; do [Nn]) ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac ;; @@ -756,16 +756,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}" } @@ -777,27 +777,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 @@ -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 상태를 확인하십시오 + # 현재 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,117 +872,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가 차단됨" } @@ -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 @@ -1002,12 +1002,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 @@ -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 @@ -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,11 +1086,11 @@ manage_country_rules() { ipset destroy "$ipset_name" fi - echo "성공적으로 해제했습니다$country_codeIP 주소 제한" + echo "성공적으로 제거되었습니다$country_codeIP 주소 제한" ;; *) - echo "사용법 : manage_country_rules {블록 | 허용 | unblock} " + echo "사용법: prepare_country_rules {block|allow|unblock} " ;; esac done @@ -1118,35 +1118,35 @@ 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. 핑 허용 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 @@ -1159,10 +1159,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 @@ -1175,40 +1175,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 + 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 + # 지정된 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 + 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,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 - # 이전 /스왑 파일을 삭제하십시오 + # 이전 /swap 파일 삭제 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 @@ -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}" @@ -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 @@ -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 @@ -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,15 +1446,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}" 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 "공개 키: /etc/letsencrypt/live/$yuming/fullchain.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 @@ -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 "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 @@ -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 } @@ -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,29 +1650,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의 캐시를 지워야 합니까? (예/아니요):" 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 "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,25 +1699,25 @@ 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 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 @@ -1733,23 +1733,23 @@ 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 켜기 : 주석을 제거하십시오 + # 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 @@ -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/ { @@ -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/ { @@ -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,11 +1881,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 @@ -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,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 @@ -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 "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 "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 @@ -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 모드" - echo "CF 배경의 오른쪽 상단 모서리로 이동하여 왼쪽의 API 토큰을 선택하고 글로벌 API 키를 얻습니다." + 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의 계좌번호를 입력하세요:" 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 @@ -2107,21 +2107,21 @@ 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) - 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의 글로벌 API 키를 입력하세요:" cftoken + read -e -p "CF에 도메인 이름의 영역 ID를 입력하세요." cfzonID cd ~ install jq bc @@ -2138,23 +2138,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) @@ -2179,10 +2179,10 @@ 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 ';') -# 값에 따라 모드 정보를 설정합니다 +# 값에 따라 모드 정보 설정 if [ "$current_value" = "8" ]; then mode_info=" 高性能模式" else @@ -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 @@ -2228,18 +2228,18 @@ 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 "사이트 표준 모드" @@ -2278,7 +2278,7 @@ web_optimization() { optimize_balanced - echo "LDNMP 환경은 표준 모드로 설정되었습니다" + echo "LDNMP 환경이 표준 모드로 설정되었습니다." ;; 2) @@ -2316,7 +2316,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP 환경은 고성능 모드로 설정되었습니다" + echo "LDNMP 환경이 고성능 모드로 설정되었습니다." ;; 3) @@ -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 # } @@ -2386,7 +2386,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "액세스 주소 :" +echo "방문 주소:" ip_address @@ -2424,31 +2424,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##*:} - # 기본 레이블이 최신입니다 + # 기본 태그는 최신입니다. [[ "$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,34 +2477,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 @@ -2514,7 +2514,7 @@ block_container_port() { fi - echo "IP+ 포트는 서비스에 액세스하는 것이 차단되었습니다" + echo "IP+포트가 서비스 접근을 차단했습니다." save_iptables_rules } @@ -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 } @@ -2589,25 +2589,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 +2616,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 +2648,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 } @@ -2750,16 +2750,16 @@ 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 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 @@ -2800,20 +2800,20 @@ 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 "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" ;; @@ -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 + 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,14 +2895,14 @@ 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 "https://가 없는 도메인 이름 형식 example.com" web_del ;; 7) @@ -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,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 @@ -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 @@ -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,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 @@ -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,16 +3185,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" } @@ -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,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,13 +3281,13 @@ ldnmp_Proxy_backend() { reverseproxy_port="${2:-}" send_stats "설치하다$webname" - echo "배포를 시작하십시오$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 @@ -3372,21 +3372,21 @@ ldnmp_web_status() { 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 @@ -3395,10 +3395,10 @@ 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 @@ -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 "관련 사이트를 만듭니다" - 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 @@ -3459,17 +3459,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 +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 "공식 웹 사이트 소개 :$panelurl " + echo "${panelname}대중적이고 강력한 운영 및 유지 관리 관리 패널입니다." + 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 +3554,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 @@ -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,17 +3620,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 패널 주소: http://$ipv4_address:$dashboard_port" + echo "FRP 패널 사용자 이름:$dashboard_user" + echo "FRP 패널 비밀번호:$dashboard_pwd" echo open_port 8055 8056 @@ -3640,9 +3640,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 echo mkdir -p /home/frp @@ -3662,17 +3662,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를 입력하십시오. [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 + 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 @@ -3694,12 +3694,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_namefrpc.toml에서 성공적으로 제거되었습니다." docker restart frpc @@ -3709,7 +3709,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # 헤더를 인쇄하십시오 + # 헤더 인쇄 printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -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, \ @@ -3739,11 +3739,11 @@ list_forwarding_services() { type } - # 현재 서비스 이름을 업데이트하십시오 + # 현재 서비스 이름 업데이트 if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 이전 값을 지우십시오 + # 이전 값 지우기 local_ip="" local_port="" remote_port="" @@ -3772,7 +3772,7 @@ list_forwarding_services() { } END { - # 마지막 서비스에 대한 정보를 인쇄하십시오 + # 마지막 서비스에 대한 정보 인쇄 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 @@ -3804,18 +3804,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 @@ -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 "공식 웹 사이트 소개 : https://github.com/fatedier/frp/" - echo "비디오 교육 : https://www.bilibili.com/video/bv1ymw6e2ewl?t=124.0" + 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 @@ -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 @@ -3906,37 +3906,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 "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 서비스 상태가 새로 고쳐졌습니다" + 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 "공식 웹 사이트 소개 : https://github.com/fatedier/frp/" - echo "비디오 교육 : https://www.bilibili.com/video/bv1ymw6e2ewl?t=173.9" + 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 @@ -3970,11 +3970,11 @@ 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 + 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,68 +4049,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 "다운로드 된 비디오 목록 :" + 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 "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 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 제거 ..." - 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 + 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 \ @@ -4118,31 +4118,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 + 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 + 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" ;; *) @@ -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 @@ -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 @@ -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,13 +4243,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 @@ -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 "사용하지 않는 의존성 정리 ..." + 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,23 +4330,23 @@ 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 + 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이 예로 설정됩니다 + # 발견된 경우 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" @@ -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 @@ -4460,17 +4460,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 @@ -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}" } @@ -4497,26 +4497,26 @@ 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; 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 } 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,41 +4527,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" @@ -4577,21 +4577,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 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 + 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 @@ -4599,49 +4599,49 @@ 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 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 exit ;; 13) - send_stats "Ubuntu 20.04를 다시 설치하십시오" + send_stats "우분투 20.04 다시 설치" dd_xitong_1 bash InstallNET.sh -ubuntu 20.04 reboot exit ;; 14) - send_stats "우분투 18.04를 다시 설치하십시오" + send_stats "우분투 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 @@ -4666,7 +4666,7 @@ dd_xitong() { ;; 23) - send_stats "Alma10을 다시 설치하십시오" + send_stats "alma10 재설치" dd_xitong_3 bash reinstall.sh almalinux 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 @@ -4714,7 +4714,7 @@ dd_xitong() { ;; 29) - send_stats "CentOS10을 다시 설치하십시오" + send_stats "centos10 재설치" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4722,7 +4722,7 @@ dd_xitong() { ;; 30) - send_stats "CentOS9를 다시 설치하십시오" + send_stats "centos9 재설치" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4730,7 +4730,7 @@ dd_xitong() { ;; 31) - send_stats "알파인을 다시 설치하십시오" + send_stats "알파인 재설치" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4738,7 +4738,7 @@ dd_xitong() { ;; 32) - send_stats "아치를 다시 설치하십시오" + send_stats "아치 재설치" dd_xitong_3 bash reinstall.sh arch reboot @@ -4746,7 +4746,7 @@ dd_xitong() { ;; 33) - send_stats "칼리를 다시 설치하십시오" + send_stats "칼리 재설치" dd_xitong_3 bash reinstall.sh kali reboot @@ -4754,7 +4754,7 @@ dd_xitong() { ;; 34) - send_stats "Openeuler를 다시 설치하십시오" + send_stats "openeuler 다시 설치" dd_xitong_3 bash reinstall.sh openeuler reboot @@ -4762,7 +4762,7 @@ dd_xitong() { ;; 35) - send_stats "재설치 OpenSuse" + send_stats "Openuse 다시 설치" 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 "Windows 11을 다시 설치하십시오" + send_stats "윈도우 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 "윈도우 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 @@ -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 @@ -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 @@ -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 "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,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 "데비안/우분투 만 지원합니다" - echo "데이터를 백업하고 BBR3에서 Linux 커널을 업그레이드 할 수 있습니다." + echo "데비안/우분투만 지원" + 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 "현재 환경은이를 지원하지 않으며 데비안 및 우분투 시스템 만 지원합니다." + 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+') @@ -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 @@ -4968,40 +4968,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 } @@ -5009,37 +5009,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 "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,26 +5052,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 "Red Hat 시리즈 배포판 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]) echo "취소" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac fi @@ -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 \ @@ -5092,19 +5092,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}" - # 마운트 매개 변수를 빌드하십시오 + # 마운트 매개변수 빌드 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 +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 run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5122,8 +5122,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,23 +5135,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 @@ -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 @@ -5188,19 +5188,19 @@ 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 +5212,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 밸런싱 비활성화 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 +5253,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 밸런싱 복원 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 +5294,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 밸런싱 복원 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 +5336,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 밸런싱 비활성화 sysctl -w kernel.numa_balancing=0 2>/dev/null @@ -5357,22 +5357,22 @@ Kernel_optimize() { while true; do clear send_stats "Linux 커널 튜닝 관리" - echo "Linux 시스템에서 커널 매개 변수의 최적화" - echo "비디오 소개 : https://www.bilibili.com/video/bv1kb421j7 yg?t=0.1" + 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 ~ @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "웹 사이트 최적화 모델" + send_stats "웹사이트 최적화 모드" ;; 4) cd ~ @@ -5411,7 +5411,7 @@ Kernel_optimize() { cd ~ clear restore_defaults - send_stats "기본 설정을 복원하십시오" + send_stats "기본 설정 복원" ;; *) break @@ -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}시스템 언어가 다음과 같이 수정되었습니다.$lang적용하려면 SSH에 다시 연결하세요.${gl_bai}" hash -r break_end @@ -5447,17 +5447,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 +5467,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 +5511,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 +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}#" @@ -5535,9 +5535,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 +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 "활성화 후 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 +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) @@ -5623,11 +5623,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 +5636,10 @@ linux_trash() { fi ;; 4) - read -e -p "재활용 쓰레기통을 지우셨습니까? [Y/N] :" confirm + read -e -p "휴지통을 비우시겠습니까? [예/아니요]:" confirm if [[ "$confirm" == "y" ]]; then trash-empty - echo "재활용 쓰레기통이 지워졌습니다." + echo "휴지통이 비워졌습니다." fi ;; *) @@ -5650,23 +5650,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 "- Enter를 눌러 기본 디렉터리(/etc/usr/home)를 사용합니다." + read -r -p "백업할 디렉터리를 입력하십시오(여러 디렉터리를 공백으로 구분하고 Enter를 눌러 기본 디렉터리를 사용하십시오)." input - # 사용자가 디렉토리를 입력하지 않으면 기본 디렉토리를 사용하십시오. + # 사용자가 디렉터리를 입력하지 않으면 기본 디렉터리가 사용됩니다. if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5674,92 +5674,92 @@ 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..." 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 "백업 파일이 존재하지 않습니다!" 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 "백업 파일이 존재하지 않습니다!" exit 1 fi - # 백업을 삭제하십시오 + # 백업 삭제 rm -f "$BACKUP_DIR/$BACKUP_NAME" if [ $? -eq 0 ]; then - echo "백업이 성공적으로 삭제되었습니다!" + echo "백업이 삭제되었습니다!" else - echo "백업 삭제가 실패했습니다!" + echo "백업 삭제에 실패했습니다!" exit 1 fi } @@ -5775,18 +5775,18 @@ linux_backup() { 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 "계속하려면 Enter를 누르세요..." done } @@ -5800,54 +5800,54 @@ 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 "- 사용자 이름: 루트" + 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 "사용자 이름을 입력하십시오(기본값: 루트):" 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 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,31 +5856,31 @@ 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 @@ -5889,44 +5889,44 @@ delete_connection() { 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 } @@ -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 @@ -5951,20 +5951,20 @@ 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 + read -e -p "선택사항을 입력하세요:" choice case $choice in 1) add_connection ;; 2) use_connection ;; 3) delete_connection ;; 0) break ;; - *) echo "잘못된 선택, 다시 시도하십시오." ;; + *) echo "선택이 잘못되었습니다. 다시 시도해 주세요." ;; esac done } @@ -5980,156 +5980,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 "파티션이 존재하지 않습니다!" 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 "파티션이 존재하지 않습니다!" 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? (예/아니요):" 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 "파티션이 존재하지 않습니다!" 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 ;; @@ -6138,7 +6138,7 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "계속하려면 Enter를 누르십시오 ..." + read -e -p "계속하려면 Enter를 누르세요..." done } @@ -6147,55 +6147,55 @@ 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 "- 원격 디렉토리 : /백업 /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 "원격 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) - read -s -p "비밀번호를 입력하십시오 :" password_or_key + read -s -p "비밀번호를 입력하세요:" password_or_key echo # 换行 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 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,47 +6203,47 @@ 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 @@ -6254,12 +6254,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,51 +6270,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 @@ -6324,30 +6324,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="" @@ -6355,42 +6355,42 @@ 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예약된 작업" } @@ -6401,20 +6401,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 "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 ;; @@ -6423,9 +6423,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "잘못된 선택, 다시 시도하십시오." ;; + *) echo "선택이 잘못되었습니다. 다시 시도해 주세요." ;; esac - read -e -p "계속하려면 Enter를 누르십시오 ..." + read -e -p "계속하려면 Enter를 누르세요..." done } @@ -6492,37 +6492,37 @@ 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}$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" 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 @@ -6540,108 +6540,108 @@ 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}소사이어티 커뮤니케이션 연결 도구" - 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}컬 다운로드 도구${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}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}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 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 "설치압축 해제" ;; 8) clear install tar clear - echo "도구가 설치되었으며 사용법은 다음과 같습니다." + echo "도구가 설치되었으며 다음과 같이 사용됩니다." tar --help - send_stats "타르를 설치하십시오" + 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) @@ -6649,7 +6649,7 @@ linux_tools() { install btop clear btop - send_stats "Btop을 설치하십시오" + send_stats "btop 설치" ;; 12) clear @@ -6658,7 +6658,7 @@ linux_tools() { clear ranger cd ~ - send_stats "레인저를 설치하십시오" + send_stats "레인저 설치" ;; 13) clear @@ -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 @@ -6694,7 +6694,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "나노를 설치하십시오" + send_stats "나노 설치" ;; @@ -6705,7 +6705,7 @@ linux_tools() { clear git --help cd ~ - send_stats "git을 설치하십시오" + send_stats "자식 설치" ;; 21) @@ -6713,67 +6713,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 "닌베이더 설치" ;; 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 컬 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) @@ -6781,7 +6781,7 @@ linux_tools() { ;; *) - echo "잘못된 입력!" + echo "입력이 잘못되었습니다!" ;; esac break_end @@ -6801,21 +6801,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 "알파인 활성화 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 "백업 없음" } @@ -6869,9 +6869,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 "백업 할 컨테이너 이름을 입력하십시오 (여러 공간으로 분리하면 입력 백업이 모두 실행 중입니다)." 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,28 +6892,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도커 작성 컨테이너입니다${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 프로젝트가 포장 된 경우 건너 뛰십시오 + # Compose 프로젝트가 이미 패키징된 경우 건너뛰세요. if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}작곡 프로젝트 [$project_name] 백업, 중복 포장을 건너 뛰십시오 ...${NC}" + echo -e "${YELLOW}프로젝트 작성 [$project_name] 이미 백업되어 있으니 반복 패키징은 생략하세요...${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 복원:$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 @@ -6955,22 +6955,22 @@ 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}" + 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}" } @@ -6981,61 +6981,61 @@ 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 프로젝트 용 컨테이너가 이미 실행 중인지 확인하십시오. + # 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" - 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 - 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 @@ -7095,61 +7095,61 @@ docker_ssh_migration() { # ---------------------------- - # 마이그레이션 + # 이주하다 # ---------------------------- migrate_docker() { send_stats "도커 마이그레이션" 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 - 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" - 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; } + 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}" } # ---------------------------- # 메인 메뉴 # ---------------------------- main_menu() { - send_stats "도커 백업 마이그레이션 및 복원" + 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. 도커 프로젝트 백업" + echo -e "2. 도커 프로젝트 마이그레이션" + 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 ;; @@ -7173,38 +7173,38 @@ 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}도커 이미지 관리" 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}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 "도커 환경 설치" install_add_docker ;; @@ -7215,22 +7215,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 "도커 글로벌 상태" + send_stats "도커 전역 상태" echo "도커 버전" docker -v 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}" + 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}" + echo -e "도커 네트워크:${gl_lv}$network_count${gl_bai}" docker network ls echo "" @@ -7270,36 +7270,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 @@ -7308,8 +7308,8 @@ linux_docker() { ;; 4) - send_stats "네트워크를 삭제하십시오" - read -e -p "삭제하려면 네트워크 이름을 입력하십시오." dockernetwork + send_stats "네트워크 삭제" + read -e -p "삭제할 네트워크 이름을 입력하세요:" dockernetwork docker network rm $dockernetwork ;; @@ -7327,25 +7327,25 @@ linux_docker() { 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 @@ -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]) @@ -7363,7 +7363,7 @@ linux_docker() { [Nn]) ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac ;; @@ -7376,7 +7376,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]) @@ -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 "도커 v6 켜짐" docker_ipv6_on ;; 12) clear - send_stats "Docker V6 레벨" + send_stats "도커 v6 닫기" docker_ipv6_off ;; @@ -7424,7 +7424,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]) @@ -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,44 +7462,44 @@ 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}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}예우 스트리밍 미디어 잠금 해제 감지" + 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}네트워크 회선 속도 테스트" + 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}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}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}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 퓨전 몬스터 검토${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}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) @@ -7509,31 +7509,31 @@ linux_test() { ;; 3) clear - send_stats "YEAHWU 스트리밍 미디어 잠금 해제 탐지" + send_stats "예우 스트리밍 미디어 잠금 해제 감지" 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 "초고속 트리플 네트워크 속도 테스트" bash <(curl -Lso- https://git.io/superspeed_uxh) ;; 14) @@ -7544,40 +7544,40 @@ 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 "베이징 모바일 : 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) ;; @@ -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 @@ -7635,48 +7635,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}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 "설치하시겠습니까? (예/아니요):" 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 +7691,7 @@ linux_Oracle() { ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac ;; @@ -7699,20 +7699,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) @@ -7724,28 +7724,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 "Oracle Cloud 재설치 시스템 스크립트" ;; [Nn]) echo "취소" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac ;; 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) @@ -7756,15 +7756,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 +7785,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 +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}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}워드프레스 설치${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 포럼 웹사이트 설치${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 +7872,10 @@ linux_ldnmp() { 3) clear - # 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 "사용자 이름 :$dbuse" + echo "데이터베이스 주소: mysql" + echo "데이터베이스 이름:$dbname" + echo "사용자 이름:$dbuse" echo "비밀번호:$dbusepasswd" - echo "테이블 접두사 : discuz_" + echo "테이블 접두사: discuz_" ;; @@ -7912,7 +7912,7 @@ linux_ldnmp() { # Kedao 클라우드 데스크탑 webname="可道云桌面" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7934,20 +7934,20 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "데이터베이스 주소 : MySQL" - echo "사용자 이름 :$dbuse" + echo "데이터베이스 주소: mysql" + echo "사용자 이름:$dbuse" echo "비밀번호:$dbusepasswd" - echo "데이터베이스 이름 :$dbname" - echo "Redis 호스트 : Redis" + echo "데이터베이스 이름:$dbname" + echo "레디스 호스트: 레디스" ;; 5) clear - # Apple CMS + # AppleCMS webname="苹果CMS" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7973,24 +7973,24 @@ linux_ldnmp() { ldnmp_web_on - echo "데이터베이스 주소 : MySQL" - echo "데이터베이스 포트 : 3306" - echo "데이터베이스 이름 :$dbname" - echo "사용자 이름 :$dbuse" + echo "데이터베이스 주소: mysql" + echo "데이터베이스 포트: 3306" + echo "데이터베이스 이름:$dbname" + echo "사용자 이름:$dbuse" echo "비밀번호:$dbusepasswd" - echo "데이터베이스 접두사 : MAC_" + echo "데이터베이스 접두사: mac_" echo "------------------------" - echo "설치가 성공한 후 배경 주소에 로그인하십시오." + echo "설치가 성공적으로 완료되면 백엔드 주소로 로그인하세요." echo "https://$yuming/vip.php" ;; 6) clear - # 한 다리 카운팅 카드 + # 한쪽다리 숫자카드 webname="独脚数卡" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8011,34 +8011,34 @@ 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 "Redis Port : 6379" + echo "레디스 주소 : 레디스" + echo "redis 비밀번호: 기본적으로 입력되지 않음" + echo "레디스 포트: 6379" echo "" - echo "웹 사이트 URL : https : //$yuming" - echo "백그라운드 로그인 경로 : /admin" + echo "웹사이트 URL: https://$yuming" + echo "백엔드 로그인 경로: /admin" echo "------------------------" - 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 @@ -8075,12 +8075,12 @@ linux_ldnmp() { ldnmp_web_on - echo "데이터베이스 주소 : MySQL" - echo "데이터베이스 이름 :$dbname" - echo "사용자 이름 :$dbuse" + echo "데이터베이스 주소: mysql" + echo "데이터베이스 이름:$dbname" + echo "사용자 이름:$dbuse" echo "비밀번호:$dbusepasswd" - echo "테이블 접두사 : flarum_" - echo "관리자 정보는 직접 설정됩니다" + 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" ;; @@ -8127,7 +8127,7 @@ linux_ldnmp() { # LinkStack webname="LinkStack" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8152,10 +8152,10 @@ linux_ldnmp() { clear ldnmp_web_on - echo "데이터베이스 주소 : MySQL" - echo "데이터베이스 포트 : 3306" - echo "데이터베이스 이름 :$dbname" - echo "사용자 이름 :$dbuse" + echo "데이터베이스 주소: mysql" + echo "데이터베이스 포트: 3306" + echo "데이터베이스 이름:$dbname" + 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 @@ -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-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" @@ -8193,20 +8193,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 "(/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 @@ -8217,15 +8217,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 @@ -8237,7 +8237,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 +8246,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-end 압축 패키지 여야합니다. Pagoda/1Panel의 백업 데이터 가져 오기를 지원하려면/홈/디렉토리에 넣으십시오." - 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,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 @@ -8278,12 +8278,12 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" - echo "데이터베이스 주소 : MySQL" - echo "데이터베이스 이름 :$dbname" - echo "사용자 이름 :$dbuse" + echo "데이터베이스 주소: mysql" + echo "데이터베이스 이름:$dbname" + echo "사용자 이름:$dbuse" echo "비밀번호:$dbusepasswd" - echo "테이블 접두사 :$prefix" - echo "관리자 로그인 정보는 직접 설정됩니다" + echo "테이블 접두사:$prefix" + 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 @@ -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" @@ -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 + echo -e "도메인 이름 형식:${gl_huang}google.com${gl_bai}" + read -e -p "역방향 프록시 도메인 이름을 입력하세요:" fandai_yuming nginx_install_status install_ssltls certs_status @@ -8357,7 +8357,7 @@ linux_ldnmp() { clear webname="Bitwarden" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" add_yuming nginx_install_status install_ssltls @@ -8380,7 +8380,7 @@ linux_ldnmp() { clear webname="halo" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" add_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 @@ -8432,7 +8432,7 @@ linux_ldnmp() { clear webname="静态站点" send_stats "설치하다$webname" - echo "배포를 시작하십시오$webname" + echo "배포 시작$webname" add_yuming repeat_add_yuming nginx_install_status @@ -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-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,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,20 +8495,20 @@ 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 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 "대상 서버 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 /home/*.tar.gz | head -1) @@ -8516,9 +8516,9 @@ 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 "전송할 파일은 찾을 수 없었습니다." + echo "전송할 파일을 찾을 수 없습니다." fi break ;; @@ -8526,7 +8526,7 @@ linux_ldnmp() { break ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac done @@ -8534,9 +8534,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 @@ -8546,18 +8546,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 ;; *) @@ -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 @@ -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 ;; @@ -8620,11 +8620,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,13 +8644,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 @@ -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 @@ -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]) @@ -8769,7 +8769,7 @@ linux_ldnmp() { ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac ;; @@ -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..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8813,71 +8813,71 @@ 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 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}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}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}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}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 패널 탐색 패널${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}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}도커 가속 스테이션${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}라마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}래그 플로 큰 모델 지식 기반" - 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}비트워든 비밀번호 관리자${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}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}코마리 서버 모니터링 도구${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}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}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}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 @@ -9030,8 +9030,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,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "Nezha를 구축하십시오" + send_stats "나타 빌드" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,9 +9073,9 @@ 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}}' 2>/dev/null | grep -q "$docker_name"; then local docker_port=$(docker port $docker_name | awk -F'[:]' '/->/ {print $NF}' | uniq) check_docker_app_ip @@ -9084,9 +9084,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) @@ -9143,7 +9143,7 @@ while true; do ;; 9|mail) - send_stats "우체국을 건설하십시오" + send_stats "우체국을 짓다" clear install telnet local app_id="9" @@ -9153,44 +9153,44 @@ 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 "포트 감지" 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 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 + 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" @@ -9200,7 +9200,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "계속하려면 키를 누르십시오 ..." + echo "계속하려면 아무 키나 누르세요..." read -n 1 -s -r -p "" install jq @@ -9219,9 +9219,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 "" @@ -9244,9 +9244,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 "" ;; @@ -9257,7 +9257,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." ;; *) @@ -9291,7 +9291,7 @@ while true; do clear ip_address - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -9311,7 +9311,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." } docker_app_plus @@ -9395,7 +9395,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -9409,7 +9409,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 @@ -9554,7 +9554,7 @@ while true; do ;; 19|safeline) - send_stats "천둥 수영장을 건설하십시오" + send_stats "천둥 웅덩이를 만들어라" local app_id="19" local docker_name=safeline-mgt @@ -9563,8 +9563,8 @@ 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 "레이치(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 @@ -9573,9 +9573,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) @@ -9585,7 +9585,7 @@ while true; do add_app_id clear - echo "Thunder Pool WAF 패널이 설치되었습니다" + echo "Leichi WAF 패널이 설치되었습니다." check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9598,7 +9598,7 @@ while true; do add_app_id clear - echo "Thunder Pool WAF 패널이 업데이트되었습니다" + echo "Leichi WAF 패널이 업데이트되었습니다." check_docker_app_ip ;; 3) @@ -9609,7 +9609,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" ;; *) @@ -9728,8 +9728,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 \ @@ -10017,7 +10017,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" @@ -10274,9 +10274,9 @@ while true; do prometheus_install clear ip_address - echo "설치" + echo "설치 완료" check_docker_app_ip - echo "초기 사용자 이름과 비밀번호는 다음과 같습니다" + echo "초기 사용자 이름과 비밀번호는 admin입니다." } docker_app_update() { @@ -10294,7 +10294,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." } docker_app_plus @@ -10381,7 +10381,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 ;; @@ -10501,7 +10501,7 @@ while true; do docker compose up -d clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -10516,7 +10516,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 @@ -10544,7 +10544,7 @@ while true; do docker compose up -d clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -10559,7 +10559,7 @@ while true; do docker compose up -d clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -10567,7 +10567,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 @@ -10588,10 +10588,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 "초기 사용자 이름 : 관리자" - echo "초기 비밀번호 : changeme" + echo "초기 사용자 이름: admin" + echo "초기 비밀번호: ChangeMe" } @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "앱이 제거되었습니다" + echo "앱이 제거되었습니다." } docker_app_plus @@ -10655,7 +10655,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 } @@ -10671,7 +10671,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 @@ -10933,7 +10933,7 @@ while true; do docker_rum() { - read -e -p "libretv 로그인 비밀번호 설정 :" app_passwd + read -e -p "LibreTV 로그인 비밀번호 설정:" app_passwd docker run -d \ --name libretv \ @@ -10967,9 +10967,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 @@ -10985,7 +10985,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -10999,7 +10999,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 @@ -11072,8 +11072,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 \ @@ -11170,11 +11170,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) @@ -11183,17 +11183,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 } @@ -11203,7 +11203,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11288,7 +11288,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 \ @@ -11392,7 +11392,7 @@ while true; do docker compose up -d clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -11405,7 +11405,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 @@ -11566,7 +11566,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 @@ -11618,7 +11618,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -11632,7 +11632,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 @@ -11707,8 +11707,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} \ @@ -11756,7 +11756,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -11770,7 +11770,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 @@ -11810,7 +11810,7 @@ while true; do block_container_port "$docker_name" "$ipv4_address" clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -11824,7 +11824,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 @@ -11842,9 +11842,9 @@ 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 + read -e -p "WireGuard 네트워크 세그먼트(기본값 10.13.13.0)를 입력하세요." NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11914,18 +11914,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}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을 다운로드하고 위의 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 } @@ -11953,16 +11953,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++)) @@ -11975,10 +11975,10 @@ while true; do fi done - # 구성 파일에 쓰십시오 + # 구성 파일 쓰기 echo "$input" > "$CONFIG_FILE" - echo "클라이언트 구성이 저장되었습니다$CONFIG_FILE" + echo "클라이언트 구성이 다음에 저장되었습니다.$CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12023,10 +12023,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 @@ -12043,7 +12043,7 @@ while true; do docker compose up -d clear - echo "설치" + echo "설치 완료" check_docker_app_ip } @@ -12057,7 +12057,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 @@ -12097,24 +12097,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" - read -e -p "백업 데이터를 원격 서버로 전송 하시겠습니까? (Y/N) :" choice + echo "생성된 백업 파일: /$backup_filename" + read -e -p "백업 데이터를 원격 서버로 전송하시겠습니까? (예/아니요):" 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) @@ -12122,14 +12122,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과 같은 웹 사이트 구축 패널의 데이터 백업은 포함되지 않습니다." + echo "참고: 현재 백업에는 docker 프로젝트만 포함되며, Pagoda, 1panel 등 웹사이트 구축 패널의 데이터 백업은 포함되지 않습니다." break ;; esac @@ -12139,29 +12139,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 "최신 백업을 복원하려면 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 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 ;; @@ -12184,35 +12184,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 @@ -12220,7 +12220,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "작업 공간을 시작하십시오$SESSION_NAME" + send_stats "작업공간 시작$SESSION_NAME" tmux_run ;; @@ -12228,63 +12228,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 ;; @@ -12296,21 +12296,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 ;; @@ -12326,29 +12326,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 + read -e -p "삭제하려는 작업공간의 이름을 입력하세요:" gongzuoqu_name tmux kill-window -t $gongzuoqu_name - send_stats "작업 공간을 삭제합니다" + send_stats "작업공간 삭제" ;; 0) kejilion ;; *) - echo "잘못된 입력!" + echo "입력이 잘못되었습니다!" ;; esac break_end @@ -12373,54 +12373,54 @@ 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}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}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}기본 호스트 확인${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}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}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 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 @@ -12428,8 +12428,8 @@ linux_Settings() { 2) clear - send_stats "로그인 비밀번호를 설정하십시오" - echo "로그인 비밀번호를 설정하십시오" + send_stats "로그인 비밀번호를 설정하세요" + echo "로그인 비밀번호를 설정하세요" passwd ;; 3) @@ -12440,18 +12440,18 @@ linux_Settings() { 4) root_use - send_stats "PY 버전 관리" + 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에서 공식적으로 지원되는 모든 버전을 완벽하게 설치합니다!" + 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 @@ -12488,7 +12488,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 @@ -12517,55 +12517,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 포트 번호를 인쇄하십시오 + # 현재 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 @@ -12584,8 +12584,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 @@ -12606,45 +12606,45 @@ 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}우선 사항" + 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) 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 수정" + echo "이 기능은 jhb에서 제공합니다. 감사합니다!" + send_stats "IPv6 수리" ;; *) @@ -12662,25 +12662,25 @@ 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 ;; @@ -12690,15 +12690,15 @@ 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 "사용자 정의 가상 메모리가 설정되었습니다" + send_stats "사용자 정의 가상 메모리 세트" ;; *) @@ -12725,22 +12725,22 @@ EOF 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" @@ -12748,14 +12748,14 @@ 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 @@ -12764,21 +12764,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 - # 사용자와 홈 디렉토리를 삭제하십시오 + read -e -p "삭제하려는 사용자 이름을 입력하세요:" username + # 사용자 및 해당 홈 디렉터리 삭제 userdel -r "$username" ;; @@ -12800,12 +12800,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[@]})) @@ -12814,27 +12814,27 @@ 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 "" - 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 "" @@ -12842,46 +12842,46 @@ 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 "현재 시스템 시간대:$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 "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 "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 "0. 이전 메뉴로 돌아가기" echo "------------------------" - read -e -p "선택을 입력하십시오 :" sub_choice + read -e -p "선택사항을 입력하세요:" sub_choice case $sub_choice in @@ -12924,21 +12924,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 @@ -12956,11 +12956,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 @@ -12968,28 +12968,28 @@ EOF 19) root_use - send_stats "시스템 업데이트 소스를 변경하십시오" + send_stats "시스템 업데이트 소스 변경" clear - echo "업데이트 소스 영역을 선택하십시오" - echo "LinuxMirrors에 연결하여 시스템 업데이트 소스를 전환하십시오" + echo "업데이트 소스 지역 선택" + echo "LinuxMirrors에 액세스하여 시스템 업데이트 소스 전환" echo "------------------------" 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 ;; *) @@ -13001,62 +13001,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 "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 # 跳出循环,退出菜单 @@ -13068,32 +13068,32 @@ EOF 21) root_use - send_stats "지역 호스트 구문 분석" + send_stats "로컬 호스트 확인" while true; do clear - echo "기본 호스트 구문 분석 목록" - 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 + 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 "로컬 호스트 해상도가 추가되었습니다." ;; 2) - read -e -p "삭제 해야하는 구문 분석 컨텐츠의 키워드를 입력하십시오." delhost + read -e -p "삭제해야 하는 구문 분석된 콘텐츠의 키워드를 입력하세요." delhost sed -i "/$delhost/d" /etc/hosts - send_stats "로컬 호스트 구문 분석 및 삭제" + send_stats "로컬 호스트 확인 및 삭제" ;; *) break # 跳出循环,退出菜单 @@ -13109,19 +13109,19 @@ 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 "1. 방어 프로그램 설치" echo "------------------------" - echo "2. SSH 차단 레코드보기" + 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) f2b_install_sshd @@ -13143,7 +13143,7 @@ EOF 9) remove fail2ban rm -rf /etc/fail2ban - echo "Fail2ban 방어 프로그램은 제거되었습니다" + echo "Fail2Ban 방어 프로그램이 제거되었습니다." break ;; *) @@ -13156,47 +13156,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 ~ @@ -13209,15 +13209,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 @@ -13230,37 +13230,37 @@ 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 "개인 키 정보" @@ -13279,18 +13279,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 "로컬 CPU, 메모리, 하드 디스크, 트래픽 및 SSH 로그인에 대한 실시간 모니터링 및 경고를 달성하려면 경고를 수신하도록 tg 로봇 API 및 사용자 ID를 구성해야 합니다." + 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 @@ -13312,7 +13312,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 @@ -13323,21 +13323,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}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 @@ -13381,7 +13381,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; } @@ -13404,39 +13404,39 @@ 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 "원 스톱 시스템 최적화" + send_stats "원스톱 튜닝" + echo "원스톱 시스템 튜닝" echo "------------------------------------------------" - echo "다음은 작동하고 최적화됩니다" - echo "1. 시스템을 최신으로 업데이트하십시오" + 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 "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 "원클릭 유지 관리를 원하시나요? (예/아니요):" 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 @@ -13444,22 +13444,22 @@ 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 -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) @@ -13476,25 +13476,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 @@ -13502,7 +13502,7 @@ EOF 99) clear - send_stats "시스템을 다시 시작하십시오" + send_stats "시스템을 다시 시작하세요" server_reboot ;; 100) @@ -13518,32 +13518,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 @@ -13559,11 +13559,11 @@ EOF 102) clear - send_stats "기술 라이온 스크립트를 제거하십시오" - echo "기술 라이온 스크립트를 제거하십시오" + send_stats "기술 사자 스크립트 제거" + echo "기술 사자 스크립트 제거" echo "------------------------------------------------" - echo "Kejilion 스크립트를 완전히 제거하고 다른 기능에 영향을 미치지 않습니다." - read -e -p "계속할거야? (Y/N) :" choice + echo "kejilion 스크립트는 다른 기능에 영향을 주지 않고 완전히 제거됩니다." + read -e -p "계속하시겠습니까? (예/아니요):" choice case "$choice" in [Yy]) @@ -13571,7 +13571,7 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "대본은 제거되었습니다." + echo "스크립트가 제거되었습니다. 안녕!" break_end clear exit @@ -13580,7 +13580,7 @@ EOF echo "취소" ;; *) - echo "잘못된 선택, y 또는 N을 입력하십시오." + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac ;; @@ -13590,7 +13590,7 @@ EOF ;; *) - echo "잘못된 입력!" + echo "입력이 잘못되었습니다!" ;; esac break_end @@ -13618,177 +13618,177 @@ 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 "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 "삭제가 실패했습니다" + 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 "파일 편집" ;; 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 "삭제가 실패했습니다" + 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 "원격 서버 사용자 이름(기본 루트)을 입력하십시오:" 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 @@ -14086,15 +14086,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 ;; *) @@ -14116,8 +14116,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}시스템 업데이트" @@ -14126,22 +14126,22 @@ 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}12. ${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}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 +read -e -p "선택사항을 입력하세요:" choice case $choice in 1) linux_info ;; @@ -14161,13 +14161,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 @@ -14175,70 +14175,70 @@ 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 "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 "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 "디스플레이 시스템 정보 K 정보" +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 제거 nano wget | k 델 나노 wget | k 나노 wget 제거 | k 나노 wget 제거" +echo "시스템 k 업데이트 업데이트 | 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 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 "도커 관리 플레인 k 도커" +echo "docker 환경 설치 k docker 설치 |k docker 설치" +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 "역방향 프록시 설치 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 즐겨찾기 | k 명령 즐겨찾기" +echo "애플리케이션 시장 관리 k app" +echo "신청번호의 빠른 관리 k app 26 | k 앱 1패널 | k 앱 npm" +echo "시스템 정보 표시 k 정보" } 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|更新) @@ -14272,7 +14272,7 @@ else rsync_run) shift - send_stats "시간이 정한 RSYNC 동기화" + send_stats "예약된 rsync 동기화" run_task "$@" ;; @@ -14291,7 +14291,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" @@ -14304,13 +14304,13 @@ else swap) shift - send_stats "가상 메모리를 신속하게 설정했습니다" + send_stats "가상 메모리를 빠르게 설정하세요" add_swap "$@" ;; time|时区) shift - send_stats "시간대를 빠르게 설정하십시오" + send_stats "시간대를 빠르게 설정" set_timedate "$@" ;; @@ -14358,7 +14358,7 @@ else status|状态) shift - send_stats "소프트웨어 상태보기" + send_stats "소프트웨어 상태 확인" status "$@" ;; start|启动) @@ -14368,7 +14368,7 @@ else ;; stop|停止) shift - send_stats "소프트웨어 일시 정지" + send_stats "소프트웨어 일시 중지" stop "$@" ;; restart|重启) @@ -14379,21 +14379,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 @@ -14403,7 +14403,7 @@ else shift case $1 in install|安装) - send_stats "Docker를 신속하게 설치하십시오" + send_stats "도커를 빠르게 설치하세요" install_docker ;; ps|容器) @@ -14411,7 +14411,7 @@ else docker_ps ;; img|镜像) - send_stats "빠른 미러 관리" + send_stats "빠른 이미지 관리" docker_image ;; *) @@ -14438,7 +14438,7 @@ else app) shift - send_stats "$@ 적용" + send_stats "신청$@" linux_panel "$@" ;; From cb46f69894e862a03d81650fc016ac22a3016515 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 19 Oct 2025 04:29:44 +0000 Subject: [PATCH 03/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202025-10-19=2004:29:44?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 60 +++++++++++++++++++++++++------------------------- jp/kejilion.sh | 50 ++++++++++++++++++++--------------------- kr/kejilion.sh | 32 +++++++++++++-------------- 3 files changed, 71 insertions(+), 71 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 11f6473a4..92fefe869 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -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 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 @@ -2115,7 +2115,7 @@ 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 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 "--------------" @@ -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 "App has been uninstalled" + echo "App uninstalled" send_stats "uninstall$docker_name" ;; @@ -3906,7 +3906,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" @@ -4003,7 +4003,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) @@ -6119,7 +6119,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 @@ -7479,7 +7479,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}------------------------" @@ -9153,7 +9153,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" @@ -9257,7 +9257,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" ;; *) @@ -9311,7 +9311,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 @@ -9409,7 +9409,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 @@ -10294,7 +10294,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 @@ -10516,7 +10516,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 @@ -10567,7 +10567,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 @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -10671,7 +10671,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 @@ -10999,7 +10999,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11405,7 +11405,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 @@ -11632,7 +11632,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 @@ -11770,7 +11770,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 @@ -11824,7 +11824,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 @@ -12057,7 +12057,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 @@ -12187,7 +12187,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" @@ -12198,7 +12198,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" @@ -12444,7 +12444,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 "------------" @@ -12636,8 +12636,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) @@ -13873,7 +13873,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}" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index bad225971..ce7c82f7c 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -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 "ポートがオープンされました" } @@ -2111,11 +2111,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 "--------------" @@ -2439,7 +2439,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) @@ -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 @@ -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" ;; @@ -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 @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "ハードディスク管理機能" while true; do clear - echo "ハードドライブのパーティション管理" + echo "ハードディスクのパーティション管理" echo -e "${gl_huang}この機能は内部テスト中であるため、運用環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions @@ -6537,7 +6537,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}" @@ -6903,7 +6903,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') @@ -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 @@ -7329,7 +7329,7 @@ linux_docker() { echo "" echo "ボリューム操作" echo "------------------------" - echo "1. 新しいボリュームを作成する" + echo "1. 新しいボリュームを作成します" echo "2. 指定したボリュームを削除します" echo "3. すべてのボリュームを削除します" echo "------------------------" @@ -9082,7 +9082,7 @@ while true; do fi echo "" echo "------------------------" - echo "1. 使用する" + echo "1. 使用方法" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -12187,7 +12187,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 "現在存在するワークスペースのリスト" @@ -12198,7 +12198,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" @@ -12636,8 +12636,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "最初にIPv6に切り替えました" - send_stats "最初にIPv6に切り替えました" + echo "IPv6優先に切り替えました" + send_stats "IPv6優先に切り替えました" ;; 3) @@ -12865,7 +12865,7 @@ EOF echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9. タイ・バンコク時間" + echo "9.タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -13519,7 +13519,7 @@ EOF fi echo "プライバシーとセキュリティ" - echo "スクリプトはユーザーの機能使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" + echo "スクリプトはユーザーによる機能の使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" echo "スクリプトのバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、使用された機能の名前が収集されます。" echo "------------------------------------------------" echo -e "現在のステータス:$status_message" @@ -13868,12 +13868,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}" @@ -13913,7 +13913,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 @@ -14191,7 +14191,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" diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 23c7cf160..fffc2f57a 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "하드디스크 관리 기능" while true; do clear - echo "하드 드라이브 파티션 관리" + echo "하드 디스크 파티션 관리" echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions @@ -7010,7 +7010,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 @@ -7145,7 +7145,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 "------------------------" @@ -7345,7 +7345,7 @@ linux_docker() { ;; 2) - read -e -p "삭제 볼륨 이름을 입력하세요(여러 볼륨 이름을 공백으로 구분하세요):" dockerjuans + read -e -p "삭제 볼륨 이름을 입력하십시오(여러 볼륨 이름을 공백으로 구분하십시오):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -9064,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "나타 빌드" + send_stats "네자 빌드" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,7 +9073,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 @@ -9153,7 +9153,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" @@ -9185,7 +9185,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 "------------------------" @@ -12187,7 +12187,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 "현재 존재하는 작업공간 목록" @@ -12198,7 +12198,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" @@ -12300,7 +12300,7 @@ linux_work() { echo -e "SSH 상주 모드${tmux_sshd_status}" echo "SSH 연결을 연 후 바로 상주 모드로 들어가고 이전 작업 상태로 바로 돌아갑니다." echo "------------------------" - echo "1. 켜기 2. 끄기" + echo "1. 켜짐 2. 꺼짐" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -12380,7 +12380,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}사용자/비밀번호 생성기" @@ -12636,8 +12636,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "먼저 IPv6로 전환됨" - send_stats "먼저 IPv6로 전환됨" + echo "IPv6 우선순위로 전환됨" + send_stats "IPv6 우선순위로 전환됨" ;; 3) @@ -12680,7 +12680,7 @@ EOF case "$choice" in 1) - send_stats "1G 가상 메모리가 설정되었습니다." + send_stats "1G 가상 메모리가 설정되었습니다" add_swap 1024 ;; @@ -13873,7 +13873,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}" From 5f07a7a5c4ef6b672c94244be11f75737baaeb88 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 26 Oct 2025 03:29:21 +0000 Subject: [PATCH 04/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202025-10-26=2003:29:21?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 50 ++++++++-------- jp/kejilion.sh | 160 ++++++++++++++++++++++++------------------------- kr/kejilion.sh | 122 ++++++++++++++++++------------------- 3 files changed, 166 insertions(+), 166 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 92fefe869..8bc692d9c 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -2115,7 +2115,7 @@ 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 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 "--------------" @@ -2540,7 +2540,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 @@ -2559,7 +2559,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 @@ -4778,7 +4778,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 @@ -5312,7 +5312,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 @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "Website optimization mode" + send_stats "Website optimization model" ;; 4) cd ~ @@ -5654,9 +5654,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 @@ -5698,7 +5698,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[@]}" @@ -5841,7 +5841,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 @@ -6189,7 +6189,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 @@ -6951,7 +6951,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") @@ -7112,7 +7112,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 @@ -8815,7 +8815,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}------------------------" @@ -9153,7 +9153,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" @@ -12140,7 +12140,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 "" @@ -12187,7 +12187,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" @@ -12200,7 +12200,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" @@ -12373,7 +12373,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" @@ -12444,7 +12444,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 "------------" @@ -13175,7 +13175,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 @@ -13728,7 +13728,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 @@ -13839,7 +13839,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 @@ -13873,7 +13873,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}" @@ -14175,7 +14175,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 ce7c82f7c..e70456f48 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -59,7 +59,7 @@ CheckFirstRun_true() { # この機能は、機能の埋め込み情報を収集し、現在のスクリプトのバージョン番号、使用時間、システム バージョン、CPU アーキテクチャ、マシンの国、およびユーザーが使用した機能名を記録します。機密情報は含まれませんので、ご安心ください。信じてください! # なぜこの機能が設計されたのでしょうか?その目的は、ユーザーが使いたい機能をより深く理解し、機能をさらに最適化し、ユーザーのニーズを満たす機能をさらに投入することです。 -# send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご心配な場合はご利用をお断りすることも可能です。 +# send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご不安がある場合はご利用をお断りすることも可能です。 @@ -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 @@ -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 "ポートがオープンしました" } @@ -1128,7 +1128,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. 前のメニューに戻る" @@ -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" ;; @@ -1660,7 +1660,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 @@ -1865,7 +1865,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 +1996,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 "------------------------" @@ -2115,7 +2115,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 "--------------" @@ -2231,7 +2231,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 +2439,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 +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 @@ -2759,7 +2759,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 @@ -3824,7 +3824,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}" @@ -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" ;; @@ -4392,7 +4392,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" @@ -5056,7 +5056,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 @@ -5104,7 +5104,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} " @@ -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 @@ -5356,7 +5356,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 "------------------------------------------------" @@ -5364,7 +5364,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. ゲームサーバー最適化モード: ゲームサーバーを最適化して、同時処理能力と応答速度を向上させます。" @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "ウェブサイト最適化モード" + send_stats "ウェブサイト最適化モデル" ;; 4) cd ~ @@ -5481,7 +5481,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" @@ -5654,9 +5654,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") # ユーザーにバックアップ ディレクトリの入力を求めるプロンプトを表示する @@ -5698,7 +5698,7 @@ create_backup() { echo "- $path" done - # バックアップの作成 + # バックアップを作成する echo "バックアップの作成$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" @@ -6167,7 +6167,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 "認証方法を選択してください:" @@ -6335,7 +6335,7 @@ run_task() { # スケジュールされたタスクを作成する schedule_task() { - send_stats "同期スケジュールされたタスクを追加する" + send_stats "同期のスケジュールされたタスクを追加する" read -e -p "定期的に同期するタスク番号を入力してください:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then @@ -6537,7 +6537,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}" @@ -6609,7 +6609,7 @@ linux_tools() { install iftop clear iftop - send_stats "iftopをインストールする" + send_stats "iftop をインストールする" ;; 7) clear @@ -6903,7 +6903,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') @@ -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 @@ -6924,7 +6924,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 @@ -6998,7 +6998,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}" @@ -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 @@ -7105,14 +7105,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 @@ -7186,7 +7186,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 ファイルを編集する" @@ -7230,7 +7230,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 "" @@ -7663,7 +7663,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} @@ -8505,7 +8505,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 を入力してください。" @@ -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,7 +8815,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}------------------------" @@ -8853,7 +8853,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 のプライベート ムービー" @@ -8863,7 +8863,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}------------------------" @@ -9073,7 +9073,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 @@ -11956,7 +11956,7 @@ while true; do # ディレクトリが存在しない場合は作成する mkdir -p "$(dirname "$CONFIG_FILE")" - echo "クライアント設定を貼り付け、Enter キーを 2 回押して保存してください。" + echo "クライアント構成を貼り付け、Enter キーを 2 回押して保存してください。" # 変数を初期化する input="" @@ -12110,7 +12110,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 @@ -12140,7 +12140,7 @@ while true; do r) root_use send_stats "すべてのアプリを復元する" - echo "利用可能なアプリケーションのバックアップ" + echo "利用可能なアプリのバックアップ" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -12187,8 +12187,8 @@ linux_work() { send_stats "バックエンドワークスペース" echo -e "バックエンドワークスペース" echo -e "システムは、バックグラウンドで永続的に実行できるワークスペースを提供し、長期的なタスクを実行するために使用できます。" - echo -e "SSH を切断しても、ワークスペース内のタスクは中断されず、バックグラウンド タスクは継続されます。" - echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、d だけを押してワークスペースを終了します。" + echo -e "SSH を切断しても、ワークスペース内のタスクは中断されず、タスクはバックグラウンドで残ります。" + echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、次に d を単独で押してワークスペースを終了します。" echo -e "${gl_kjlan}------------------------" echo "現在存在するワークスペースのリスト" echo -e "${gl_kjlan}------------------------" @@ -12200,7 +12200,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" @@ -12373,12 +12373,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}------------------------" @@ -12449,7 +12449,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 @@ -12636,8 +12636,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "IPv6優先に切り替えました" - send_stats "IPv6優先に切り替えました" + echo "最初にIPv6に切り替えました" + send_stats "最初にIPv6に切り替えました" ;; 3) @@ -12850,7 +12850,7 @@ EOF # 現在のシステムのタイムゾーンを取得する local timezone=$(current_timezone) - # 現在のシステム時刻を取得します + # 現在のシステム時刻を取得する local current_time=$(date +"%Y-%m-%d %H:%M:%S") # タイムゾーンと時間を表示する @@ -12865,7 +12865,7 @@ EOF echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9.タイ・バンコク時間" + echo "9. タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -13175,7 +13175,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 @@ -13279,7 +13279,7 @@ EOF 25) root_use - send_stats "電報警報" + send_stats "電報警告" echo "TG-bot監視・早期警告機能" echo "動画紹介:https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" @@ -13519,7 +13519,7 @@ EOF fi echo "プライバシーとセキュリティ" - echo "スクリプトはユーザーによる機能の使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" + echo "スクリプトはユーザーの機能使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" echo "スクリプトのバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、使用された機能の名前が収集されます。" echo "------------------------------------------------" echo -e "現在のステータス:$status_message" @@ -13712,7 +13712,7 @@ linux_file() { continue fi - read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path + read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリの移動に失敗しました: 宛先パスが指定されていません" @@ -13732,7 +13732,7 @@ linux_file() { continue fi - read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path + read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリのコピーに失敗しました: 宛先パスが指定されていません" @@ -13839,7 +13839,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 @@ -13868,12 +13868,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}" @@ -13913,7 +13913,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 @@ -14047,7 +14047,7 @@ while true; do fi echo "------------------------" - echo "1. 今すぐ更新します。 2. 自動更新をオンにします。 3. 自動更新をオフにします。" + echo "1. 今すぐ更新します 2. 自動更新をオンにします 3. 自動更新をオフにします" echo "------------------------" echo "0. メインメニューに戻る" echo "------------------------" @@ -14139,7 +14139,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 @@ -14175,14 +14175,14 @@ 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 アップデートを更新 | kアップデート" +echo "パッケージをアンインストールします。 k 削除 nano wget | kデルナノwget | k nano wget をアンインストールする | nano wgetをアンインストールします" +echo "システム k 更新を更新します。 kアップデート" echo "クリーン系ジャンククリーン |きれいだ" echo "システムパネルを再度取り付けます。 k再インストール" echo "BBR3 コントロール パネル K BBR3 | k bbrv3" @@ -14191,7 +14191,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" @@ -14210,7 +14210,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 "ファイアウォール パネル k fhq |k ファイアウォール" echo "ポートを開きます k dkdk 8080 |k ポートを開きます 8080" @@ -14304,7 +14304,7 @@ else swap) shift - send_stats "仮想メモリをすばやくセットアップする" + send_stats "仮想メモリを素早く設定する" add_swap "$@" ;; @@ -14403,7 +14403,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 fffc2f57a..d9b47e55f 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -59,7 +59,7 @@ CheckFirstRun_true() { # 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. -# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 불편하신 점이 있으시면 이용을 거부하실 수 있습니다. +# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. @@ -1122,7 +1122,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 @@ -1528,7 +1528,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" @@ -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 # } @@ -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) - # 획득한 시간을 확인하세요. + # 획득한 시간을 확인 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) @@ -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 @@ -2656,7 +2656,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 @@ -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 @@ -2759,7 +2759,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 +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 @@ -3185,16 +3185,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" } @@ -3620,7 +3620,7 @@ EOF donlond_frp frps - # 생성된 정보를 출력 + # 생성된 정보 출력 ip_address echo "------------------------" echo "클라이언트 배포에 필요한 매개변수" @@ -3682,7 +3682,7 @@ remote_port = ${remote_port} EOF - # 생성된 정보를 출력 + # 생성된 정보 출력 echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." docker restart frpc @@ -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" ;; @@ -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 ;; @@ -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 @@ -5038,7 +5038,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 @@ -5056,7 +5056,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 @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "웹사이트 최적화 모드" + send_stats "웹사이트 최적화 모델" ;; 4) cd ~ @@ -5598,7 +5598,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 "------------------------" @@ -5837,11 +5837,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 @@ -6185,11 +6185,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 @@ -6871,7 +6871,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 @@ -7010,7 +7010,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 @@ -7112,7 +7112,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 @@ -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 @@ -8815,7 +8815,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}------------------------" @@ -8855,7 +8855,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 지능형 문서 관리 시스템" @@ -9064,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "네자 빌드" + send_stats "나타 빌드" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,7 +9073,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 @@ -9153,7 +9153,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" @@ -9563,7 +9563,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 @@ -12140,7 +12140,7 @@ while true; do r) root_use send_stats "모든 앱 복원" - echo "사용 가능한 애플리케이션 백업" + echo "사용 가능한 앱 백업" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -12187,7 +12187,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 "현재 존재하는 작업공간 목록" @@ -12200,7 +12200,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" @@ -12300,7 +12300,7 @@ linux_work() { echo -e "SSH 상주 모드${tmux_sshd_status}" echo "SSH 연결을 연 후 바로 상주 모드로 들어가고 이전 작업 상태로 바로 돌아갑니다." echo "------------------------" - echo "1. 켜짐 2. 꺼짐" + echo "1. 켜기 2. 끄기" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -12377,7 +12377,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 전환" @@ -12636,8 +12636,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "IPv6 우선순위로 전환됨" - send_stats "IPv6 우선순위로 전환됨" + echo "먼저 IPv6로 전환됨" + send_stats "먼저 IPv6로 전환됨" ;; 3) @@ -12870,7 +12870,7 @@ EOF echo "유럽" echo "11. 영국 런던 시간 12. 프랑스 파리 시간" echo "13. 독일 베를린 시간 14. 러시아 모스크바 시간" - echo "15. 네덜란드 유트라흐트 시간 16. 스페인 마드리드 시간" + echo "15. 네덜란드 위트라흐트 시간 16. 스페인 마드리드 시간" echo "------------------------" echo "미국" echo "21. 미국 서부 시간 22. 미국 동부 시간" @@ -13175,7 +13175,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 @@ -13421,7 +13421,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}" @@ -13543,7 +13543,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 @@ -13728,7 +13728,7 @@ linux_file() { read -e -p "복사할 파일 또는 디렉터리 경로를 입력하세요." src_path if [ ! -e "$src_path" ]; then echo "오류: 파일 또는 디렉터리가 존재하지 않습니다." - send_stats "파일 또는 디렉터리 복사 실패: 파일 또는 디렉터리가 존재하지 않습니다." + send_stats "파일 또는 디렉터리를 복사하지 못했습니다. 파일 또는 디렉터리가 존재하지 않습니다." continue fi @@ -13739,7 +13739,7 @@ linux_file() { continue fi - # 디렉토리를 반복적으로 복사하려면 -r 옵션을 사용하십시오. + # 디렉토리를 재귀적으로 복사하려면 -r 옵션을 사용하십시오. cp -r "$src_path" "$dest_path" && echo "복사된 파일 또는 디렉터리$dest_path" || echo "파일 또는 디렉터리를 복사하지 못했습니다." send_stats "파일 또는 디렉터리 복사" ;; @@ -13839,7 +13839,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 @@ -13873,7 +13873,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}" @@ -13915,7 +13915,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 ;; @@ -13987,7 +13987,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}" @@ -14175,12 +14175,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 클린 | 케이 깨끗하다" @@ -14209,16 +14209,16 @@ 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 "방화벽 패널 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 d3c4dd42819dfd4559462ce734e47d20a2670588 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 2 Nov 2025 04:09:42 +0000 Subject: [PATCH 05/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=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 | 94 +++++++++++++++---------------- jp/kejilion.sh | 150 ++++++++++++++++++++++++------------------------- kr/kejilion.sh | 118 +++++++++++++++++++------------------- 3 files changed, 181 insertions(+), 181 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 8bc692d9c..a0be5195b 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -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 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 @@ -2540,7 +2540,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 @@ -2559,7 +2559,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 @@ -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 "App uninstalled" + echo "App has been uninstalled" send_stats "uninstall$docker_name" ;; @@ -3906,7 +3906,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" @@ -4003,7 +4003,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) @@ -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 setup is complete!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is completed!${gl_bai}" } @@ -4778,7 +4778,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 @@ -5312,7 +5312,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 @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "Website optimization model" + send_stats "Website optimization mode" ;; 4) cd ~ @@ -5654,9 +5654,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 @@ -5698,7 +5698,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[@]}" @@ -5841,7 +5841,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 @@ -6119,7 +6119,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 @@ -6189,7 +6189,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 @@ -6951,7 +6951,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") @@ -7112,7 +7112,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 @@ -7479,7 +7479,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}------------------------" @@ -9257,7 +9257,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" ;; *) @@ -9311,7 +9311,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 @@ -9409,7 +9409,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 @@ -10294,7 +10294,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 @@ -10516,7 +10516,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 @@ -10567,7 +10567,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 @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -10671,7 +10671,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 @@ -10999,7 +10999,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11405,7 +11405,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 @@ -11632,7 +11632,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 @@ -11770,7 +11770,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 @@ -11824,7 +11824,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 @@ -12057,7 +12057,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 @@ -12140,7 +12140,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 "" @@ -12198,9 +12198,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" @@ -12373,7 +12373,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" @@ -12636,8 +12636,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) @@ -13175,7 +13175,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 @@ -13728,7 +13728,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 @@ -13839,7 +13839,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 @@ -13873,7 +13873,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}" @@ -13990,7 +13990,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 "" @@ -14175,7 +14175,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 e70456f48..f49caf3e5 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -59,7 +59,7 @@ CheckFirstRun_true() { # この機能は、機能の埋め込み情報を収集し、現在のスクリプトのバージョン番号、使用時間、システム バージョン、CPU アーキテクチャ、マシンの国、およびユーザーが使用した機能名を記録します。機密情報は含まれませんので、ご安心ください。信じてください! # なぜこの機能が設計されたのでしょうか?その目的は、ユーザーが使いたい機能をより深く理解し、機能をさらに最適化し、ユーザーのニーズを満たす機能をさらに投入することです。 -# send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご不安がある場合はご利用をお断りすることも可能です。 +# send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご心配な場合はご利用をお断りすることも可能です。 @@ -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 @@ -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 "ポートがオープンされました" } @@ -1128,7 +1128,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. 前のメニューに戻る" @@ -1660,7 +1660,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 @@ -1865,7 +1865,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 +1996,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 "------------------------" @@ -2115,7 +2115,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 "--------------" @@ -2231,7 +2231,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 圧縮をオフにする" @@ -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 @@ -2759,7 +2759,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 @@ -3824,7 +3824,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}" @@ -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" ;; @@ -4392,7 +4392,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" @@ -5056,7 +5056,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 @@ -5104,7 +5104,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} " @@ -5356,7 +5356,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 "------------------------------------------------" @@ -5364,7 +5364,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. ゲームサーバー最適化モード: ゲームサーバーを最適化して、同時処理能力と応答速度を向上させます。" @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "ウェブサイト最適化モデル" + send_stats "ウェブサイト最適化モード" ;; 4) cd ~ @@ -5481,7 +5481,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" @@ -5654,9 +5654,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") # ユーザーにバックアップ ディレクトリの入力を求めるプロンプトを表示する @@ -5698,7 +5698,7 @@ create_backup() { echo "- $path" done - # バックアップを作成する + # バックアップの作成 echo "バックアップの作成$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" @@ -5786,7 +5786,7 @@ linux_backup() { 3) delete_backup ;; *) break ;; esac - read -e -p "続行するには Enter キーを押してください..." + read -e -p "Enter を押して続行します..." done } @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "ハードディスク管理機能" while true; do clear - echo "ハードディスクのパーティション管理" + echo "ハードドライブのパーティション管理" echo -e "${gl_huang}この機能は内部テスト中であるため、運用環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions @@ -6167,7 +6167,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 "認証方法を選択してください:" @@ -6335,7 +6335,7 @@ run_task() { # スケジュールされたタスクを作成する schedule_task() { - send_stats "同期のスケジュールされたタスクを追加する" + send_stats "同期スケジュールされたタスクを追加する" read -e -p "定期的に同期するタスク番号を入力してください:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then @@ -6537,7 +6537,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}" @@ -6609,7 +6609,7 @@ linux_tools() { install iftop clear iftop - send_stats "iftop をインストールする" + send_stats "iftopをインストールする" ;; 7) clear @@ -6903,7 +6903,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') @@ -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 @@ -6924,7 +6924,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 @@ -6998,7 +6998,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}" @@ -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 @@ -7105,14 +7105,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 @@ -7230,7 +7230,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 "" @@ -7329,7 +7329,7 @@ linux_docker() { echo "" echo "ボリューム操作" echo "------------------------" - echo "1. 新しいボリュームを作成します" + echo "1. 新しいボリュームを作成する" echo "2. 指定したボリュームを削除します" echo "3. すべてのボリュームを削除します" echo "------------------------" @@ -7663,7 +7663,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} @@ -8505,7 +8505,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 を入力してください。" @@ -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,7 +8815,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}------------------------" @@ -8853,7 +8853,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 のプライベート ムービー" @@ -8863,7 +8863,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}------------------------" @@ -9073,7 +9073,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 @@ -11956,7 +11956,7 @@ while true; do # ディレクトリが存在しない場合は作成する mkdir -p "$(dirname "$CONFIG_FILE")" - echo "クライアント構成を貼り付け、Enter キーを 2 回押して保存してください。" + echo "クライアント設定を貼り付け、Enter キーを 2 回押して保存してください。" # 変数を初期化する input="" @@ -12110,7 +12110,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 @@ -12140,7 +12140,7 @@ while true; do r) root_use send_stats "すべてのアプリを復元する" - echo "利用可能なアプリのバックアップ" + echo "利用可能なアプリケーションのバックアップ" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -12188,7 +12188,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}------------------------" @@ -12198,9 +12198,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" @@ -12373,12 +12373,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}------------------------" @@ -12449,7 +12449,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 @@ -12850,7 +12850,7 @@ EOF # 現在のシステムのタイムゾーンを取得する local timezone=$(current_timezone) - # 現在のシステム時刻を取得する + # 現在のシステム時刻を取得します local current_time=$(date +"%Y-%m-%d %H:%M:%S") # タイムゾーンと時間を表示する @@ -12865,7 +12865,7 @@ EOF echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9. タイ・バンコク時間" + echo "9.タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -13175,7 +13175,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 @@ -13279,7 +13279,7 @@ EOF 25) root_use - send_stats "電報警告" + send_stats "電報警報" echo "TG-bot監視・早期警告機能" echo "動画紹介:https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" @@ -13519,7 +13519,7 @@ EOF fi echo "プライバシーとセキュリティ" - echo "スクリプトはユーザーの機能使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" + echo "スクリプトはユーザーによる機能の使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" echo "スクリプトのバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、使用された機能の名前が収集されます。" echo "------------------------------------------------" echo -e "現在のステータス:$status_message" @@ -13712,7 +13712,7 @@ linux_file() { continue fi - read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path + read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリの移動に失敗しました: 宛先パスが指定されていません" @@ -13839,7 +13839,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 @@ -13868,12 +13868,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}" @@ -13913,7 +13913,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 @@ -13990,7 +13990,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 "" @@ -14047,7 +14047,7 @@ while true; do fi echo "------------------------" - echo "1. 今すぐ更新します 2. 自動更新をオンにします 3. 自動更新をオフにします" + echo "1. 今すぐ更新します。 2. 自動更新をオンにします。 3. 自動更新をオフにします。" echo "------------------------" echo "0. メインメニューに戻る" echo "------------------------" @@ -14139,7 +14139,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 @@ -14181,8 +14181,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" @@ -14210,7 +14210,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 "ファイアウォール パネル k fhq |k ファイアウォール" echo "ポートを開きます k dkdk 8080 |k ポートを開きます 8080" @@ -14304,7 +14304,7 @@ else swap) shift - send_stats "仮想メモリを素早く設定する" + send_stats "仮想メモリをすばやくセットアップする" add_swap "$@" ;; @@ -14403,7 +14403,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 d9b47e55f..0542aed7b 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1122,7 +1122,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 @@ -1528,7 +1528,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" @@ -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 # } @@ -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) - # 획득한 시간을 확인 + # 획득한 시간을 확인하세요. 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) @@ -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 @@ -2656,7 +2656,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 @@ -2759,7 +2759,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 +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 @@ -3185,16 +3185,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" } @@ -3620,7 +3620,7 @@ EOF donlond_frp frps - # 생성된 정보 출력 + # 생성된 정보를 출력 ip_address echo "------------------------" echo "클라이언트 배포에 필요한 매개변수" @@ -3682,7 +3682,7 @@ remote_port = ${remote_port} EOF - # 생성된 정보 출력 + # 생성된 정보를 출력 echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." docker restart frpc @@ -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" ;; @@ -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 ;; @@ -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 @@ -5038,7 +5038,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 @@ -5056,7 +5056,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 @@ -5092,7 +5092,7 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "스캔할 디렉터리를 지정하십시오." + echo "스캔할 디렉터리를 지정하세요." return fi @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "웹사이트 최적화 모델" + send_stats "웹사이트 최적화 모드" ;; 4) cd ~ @@ -5598,7 +5598,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 "------------------------" @@ -5837,11 +5837,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 @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "하드디스크 관리 기능" while true; do clear - echo "하드 디스크 파티션 관리" + echo "하드 드라이브 파티션 관리" echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions @@ -6185,11 +6185,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 @@ -6871,7 +6871,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 @@ -7010,7 +7010,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 @@ -7112,7 +7112,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 @@ -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 @@ -7345,7 +7345,7 @@ linux_docker() { ;; 2) - read -e -p "삭제 볼륨 이름을 입력하십시오(여러 볼륨 이름을 공백으로 구분하십시오):" dockerjuans + read -e -p "삭제 볼륨 이름을 입력하세요(여러 볼륨 이름을 공백으로 구분하세요):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -8815,7 +8815,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}------------------------" @@ -8855,7 +8855,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 지능형 문서 관리 시스템" @@ -9073,7 +9073,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 @@ -9185,7 +9185,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 "------------------------" @@ -9563,7 +9563,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 @@ -12140,7 +12140,7 @@ while true; do r) root_use send_stats "모든 앱 복원" - echo "사용 가능한 앱 백업" + echo "사용 가능한 애플리케이션 백업" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -12198,9 +12198,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" @@ -12300,7 +12300,7 @@ linux_work() { echo -e "SSH 상주 모드${tmux_sshd_status}" echo "SSH 연결을 연 후 바로 상주 모드로 들어가고 이전 작업 상태로 바로 돌아갑니다." echo "------------------------" - echo "1. 켜기 2. 끄기" + echo "1. 켜짐 2. 꺼짐" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -12377,10 +12377,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}사용자/비밀번호 생성기" @@ -12870,7 +12870,7 @@ EOF echo "유럽" echo "11. 영국 런던 시간 12. 프랑스 파리 시간" echo "13. 독일 베를린 시간 14. 러시아 모스크바 시간" - echo "15. 네덜란드 위트라흐트 시간 16. 스페인 마드리드 시간" + echo "15. 네덜란드 유트라흐트 시간 16. 스페인 마드리드 시간" echo "------------------------" echo "미국" echo "21. 미국 서부 시간 22. 미국 동부 시간" @@ -13175,7 +13175,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 @@ -13421,7 +13421,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}" @@ -13543,7 +13543,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 @@ -13728,7 +13728,7 @@ linux_file() { read -e -p "복사할 파일 또는 디렉터리 경로를 입력하세요." src_path if [ ! -e "$src_path" ]; then echo "오류: 파일 또는 디렉터리가 존재하지 않습니다." - send_stats "파일 또는 디렉터리를 복사하지 못했습니다. 파일 또는 디렉터리가 존재하지 않습니다." + send_stats "파일 또는 디렉터리 복사 실패: 파일 또는 디렉터리가 존재하지 않습니다." continue fi @@ -13739,7 +13739,7 @@ linux_file() { continue fi - # 디렉토리를 재귀적으로 복사하려면 -r 옵션을 사용하십시오. + # 디렉토리를 반복적으로 복사하려면 -r 옵션을 사용하십시오. cp -r "$src_path" "$dest_path" && echo "복사된 파일 또는 디렉터리$dest_path" || echo "파일 또는 디렉터리를 복사하지 못했습니다." send_stats "파일 또는 디렉터리 복사" ;; @@ -13839,7 +13839,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 @@ -13873,7 +13873,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}" @@ -13915,7 +13915,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 ;; @@ -13987,10 +13987,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 "" @@ -14180,7 +14180,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 클린 | 케이 깨끗하다" @@ -14209,11 +14209,11 @@ 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 "방화벽 패널 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 차단" From 868854b018c2f6682308ddaee110d6ebc39e3fca Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 9 Nov 2025 03:52:30 +0000 Subject: [PATCH 06/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=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 | 6 +++--- jp/kejilion.sh | 32 ++++++++++++++++---------------- kr/kejilion.sh | 22 +++++++++++----------- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index a0be5195b..b864d7408 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -6119,7 +6119,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 @@ -8815,7 +8815,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}------------------------" @@ -12444,7 +12444,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 "------------" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index f49caf3e5..4414a5396 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -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" @@ -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ログインの設定は完了です!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定が完了しました!${gl_bai}" } @@ -5786,7 +5786,7 @@ linux_backup() { 3) delete_backup ;; *) break ;; esac - read -e -p "Enter を押して続行します..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "ハードディスク管理機能" while true; do clear - echo "ハードドライブのパーティション管理" + echo "ハードディスクのパーティション管理" echo -e "${gl_huang}この機能は内部テスト中であるため、運用環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions @@ -6537,7 +6537,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}" @@ -6903,7 +6903,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') @@ -7186,7 +7186,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 ファイルを編集する" @@ -9082,7 +9082,7 @@ while true; do fi echo "" echo "------------------------" - echo "1. 使用方法" + echo "1. 使用する" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -12636,8 +12636,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "最初にIPv6に切り替えました" - send_stats "最初にIPv6に切り替えました" + echo "IPv6優先に切り替えました" + send_stats "IPv6優先に切り替えました" ;; 3) @@ -13519,7 +13519,7 @@ EOF fi echo "プライバシーとセキュリティ" - echo "スクリプトはユーザーによる機能の使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" + echo "スクリプトはユーザーの機能使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" echo "スクリプトのバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、使用された機能の名前が収集されます。" echo "------------------------------------------------" echo -e "現在のステータス:$status_message" @@ -13732,7 +13732,7 @@ linux_file() { continue fi - read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path + read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリのコピーに失敗しました: 宛先パスが指定されていません" @@ -13868,7 +13868,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}システムをクリーンアップする" @@ -13906,7 +13906,7 @@ while true; do 4) clear - send_stats "バックアップクラスター" + send_stats "バックアップクラスタ" echo -e "変更してください${gl_huang}/root/cluster/servers.py${gl_bai}ファイルをダウンロードしてバックアップを完了してください。" break_end ;; @@ -14175,7 +14175,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 0542aed7b..3c8522e5f 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -59,7 +59,7 @@ CheckFirstRun_true() { # 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. -# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. +# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 불편하신 점이 있으시면 이용을 거부하실 수 있습니다. @@ -2759,7 +2759,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 +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 @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "하드디스크 관리 기능" while true; do clear - echo "하드 드라이브 파티션 관리" + echo "하드 디스크 파티션 관리" echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions @@ -9073,7 +9073,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 @@ -9185,7 +9185,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 "------------------------" @@ -12300,7 +12300,7 @@ linux_work() { echo -e "SSH 상주 모드${tmux_sshd_status}" echo "SSH 연결을 연 후 바로 상주 모드로 들어가고 이전 작업 상태로 바로 돌아갑니다." echo "------------------------" - echo "1. 켜짐 2. 꺼짐" + echo "1. 켜기 2. 끄기" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -12636,8 +12636,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "먼저 IPv6로 전환됨" - send_stats "먼저 IPv6로 전환됨" + echo "IPv6 우선순위로 전환됨" + send_stats "IPv6 우선순위로 전환됨" ;; 3) @@ -14175,7 +14175,7 @@ done k_info() { -send_stats "k 명령 참조 사용 사례" +send_stats "k 명령 참조 예" echo "-------------------" echo "영상 소개: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "다음은 k 명령의 참조 사용 사례입니다." @@ -14218,7 +14218,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 정보" } From b2a4e6f192c7fbfc44f6335e91d09baa5011ba23 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 16 Nov 2025 04:14:54 +0000 Subject: [PATCH 07/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202025-11-16=2004:14:54?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 52 +++++++++++++++++++++++++------------------------- jp/kejilion.sh | 28 +++++++++++++-------------- kr/kejilion.sh | 28 +++++++++++++-------------- 3 files changed, 54 insertions(+), 54 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index b864d7408..161e45648 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -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 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 @@ -2115,7 +2115,7 @@ 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 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 "--------------" @@ -2540,7 +2540,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 @@ -2559,7 +2559,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 @@ -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 "App has been uninstalled" + echo "App uninstalled" send_stats "uninstall$docker_name" ;; @@ -3906,7 +3906,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" @@ -4003,7 +4003,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) @@ -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 setup is completed!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is complete!${gl_bai}" } @@ -9153,7 +9153,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" @@ -9257,7 +9257,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" ;; *) @@ -9311,7 +9311,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 @@ -9409,7 +9409,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 @@ -10294,7 +10294,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 @@ -10516,7 +10516,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 @@ -10567,7 +10567,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 @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -10671,7 +10671,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 @@ -10999,7 +10999,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11405,7 +11405,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 @@ -11632,7 +11632,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 @@ -11770,7 +11770,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 @@ -11824,7 +11824,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 @@ -12057,7 +12057,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 @@ -12444,7 +12444,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 "------------" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 4414a5396..70c83d929 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -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" @@ -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 @@ -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" ;; @@ -4342,7 +4342,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 "------------------------" @@ -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ログインの設定が完了しました!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定は完了です!${gl_bai}" } @@ -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 @@ -5356,7 +5356,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 "------------------------------------------------" @@ -6903,7 +6903,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') @@ -12636,8 +12636,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "IPv6優先に切り替えました" - send_stats "IPv6優先に切り替えました" + echo "最初にIPv6に切り替えました" + send_stats "最初にIPv6に切り替えました" ;; 3) @@ -13175,7 +13175,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 @@ -13906,7 +13906,7 @@ while true; do 4) clear - send_stats "バックアップクラスタ" + send_stats "バックアップクラスター" echo -e "変更してください${gl_huang}/root/cluster/servers.py${gl_bai}ファイルをダウンロードしてバックアップを完了してください。" break_end ;; @@ -13990,7 +13990,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 3c8522e5f..132c4495c 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -59,7 +59,7 @@ CheckFirstRun_true() { # 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. -# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 불편하신 점이 있으시면 이용을 거부하실 수 있습니다. +# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. @@ -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 @@ -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 @@ -2759,7 +2759,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 @@ -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 @@ -7345,7 +7345,7 @@ linux_docker() { ;; 2) - read -e -p "삭제 볼륨 이름을 입력하세요(여러 볼륨 이름을 공백으로 구분하세요):" dockerjuans + read -e -p "삭제 볼륨 이름을 입력하십시오(여러 볼륨 이름을 공백으로 구분하십시오):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -9064,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "나타 빌드" + send_stats "네자 빌드" local app_id="7" local docker_name="nezha-dashboard" @@ -9153,7 +9153,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" @@ -12636,8 +12636,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "IPv6 우선순위로 전환됨" - send_stats "IPv6 우선순위로 전환됨" + echo "먼저 IPv6로 전환됨" + send_stats "먼저 IPv6로 전환됨" ;; 3) @@ -13175,7 +13175,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 @@ -13990,7 +13990,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 "" @@ -14218,7 +14218,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 "시스템 정보 표시 k 정보" } From 4fee2410db62ac990ac843d61e0621acd951a218 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 23 Nov 2025 04:48:53 +0000 Subject: [PATCH 08/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=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 | 70 +++++++++++++++++++++++++------------------------- jp/kejilion.sh | 44 +++++++++++++++---------------- kr/kejilion.sh | 26 +++++++++---------- 3 files changed, 70 insertions(+), 70 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 161e45648..bd47c0807 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -2115,7 +2115,7 @@ 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 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 "--------------" @@ -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 "App uninstalled" + echo "App has been uninstalled" send_stats "uninstall$docker_name" ;; @@ -3906,7 +3906,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" @@ -4003,7 +4003,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) @@ -4460,7 +4460,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}" } @@ -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}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 } @@ -4778,7 +4778,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 @@ -5312,7 +5312,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 @@ -6119,7 +6119,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 @@ -6537,7 +6537,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}" @@ -9153,7 +9153,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" @@ -9257,7 +9257,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" ;; *) @@ -9311,7 +9311,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 @@ -9409,7 +9409,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 @@ -10294,7 +10294,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 @@ -10516,7 +10516,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 @@ -10567,7 +10567,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 @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -10671,7 +10671,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 @@ -10999,7 +10999,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11405,7 +11405,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 @@ -11632,7 +11632,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 @@ -11770,7 +11770,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 @@ -11824,7 +11824,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 @@ -12057,7 +12057,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 @@ -12187,7 +12187,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" @@ -12198,7 +12198,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" @@ -12636,8 +12636,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) @@ -13175,7 +13175,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 @@ -13873,7 +13873,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}" @@ -13990,7 +13990,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 70c83d929..185e3f058 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 @@ -2111,7 +2111,7 @@ web_security() { ;; 22) - send_stats "高負荷により5秒シールドが可能" + send_stats "高負荷で5秒シールド可能" echo -e "${gl_huang}Web サイトは 5 分ごとに自動的に検出します。高負荷を検出すると自動的にシールドが開き、低負荷を検出すると5秒間自動的にシールドが閉じます。${gl_bai}" echo "--------------" echo "CFパラメータを取得します。" @@ -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" ;; @@ -4342,7 +4342,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 "------------------------" @@ -4460,7 +4460,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}" } @@ -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}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 } @@ -5139,7 +5139,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 "ウイルス、トロイの木馬、スパイウェア、悪意のあるスクリプト、その他の有害なソフトウェアが含まれます。" @@ -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 @@ -5356,7 +5356,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 "------------------------------------------------" @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "ハードディスク管理機能" while true; do clear - echo "ハードディスクのパーティション管理" + echo "ハードドライブのパーティション管理" echo -e "${gl_huang}この機能は内部テスト中であるため、運用環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions @@ -6537,7 +6537,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}" @@ -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 @@ -7186,7 +7186,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 ファイルを編集する" @@ -7329,7 +7329,7 @@ linux_docker() { echo "" echo "ボリューム操作" echo "------------------------" - echo "1. 新しいボリュームを作成する" + echo "1. 新しいボリュームを作成します" echo "2. 指定したボリュームを削除します" echo "3. すべてのボリュームを削除します" echo "------------------------" @@ -8815,7 +8815,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}------------------------" @@ -9082,7 +9082,7 @@ while true; do fi echo "" echo "------------------------" - echo "1. 使用する" + echo "1. 使用方法" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -12187,7 +12187,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 "現在存在するワークスペースのリスト" @@ -12198,7 +12198,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" @@ -13868,12 +13868,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}" @@ -13906,7 +13906,7 @@ while true; do 4) clear - send_stats "バックアップクラスター" + send_stats "バックアップクラスタ" echo -e "変更してください${gl_huang}/root/cluster/servers.py${gl_bai}ファイルをダウンロードしてバックアップを完了してください。" break_end ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 132c4495c..d86a9c43c 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -59,7 +59,7 @@ CheckFirstRun_true() { # 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. -# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. +# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 불편하신 점이 있으시면 이용을 거부하실 수 있습니다. @@ -4460,7 +4460,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}" } @@ -5092,7 +5092,7 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "스캔할 디렉터리를 지정하세요." + echo "스캔할 디렉터리를 지정하십시오." return fi @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "하드디스크 관리 기능" while true; do clear - echo "하드 디스크 파티션 관리" + echo "하드 드라이브 파티션 관리" echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions @@ -7345,7 +7345,7 @@ linux_docker() { ;; 2) - read -e -p "삭제 볼륨 이름을 입력하십시오(여러 볼륨 이름을 공백으로 구분하십시오):" dockerjuans + read -e -p "삭제 볼륨 이름을 입력하세요(여러 볼륨 이름을 공백으로 구분하세요):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -8815,7 +8815,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}------------------------" @@ -9064,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "네자 빌드" + send_stats "나타 빌드" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,7 +9073,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 @@ -9153,7 +9153,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" @@ -12187,7 +12187,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 "현재 존재하는 작업공간 목록" @@ -12198,7 +12198,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" @@ -13873,7 +13873,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}" @@ -14218,7 +14218,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 정보" } From 22099e33c08de2977592ddc69c1afc772d3a86e6 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 30 Nov 2025 04:42:05 +0000 Subject: [PATCH 09/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202025-11-30=2004:42:05?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 64 +++++++++++++++++++++++++------------------------- jp/kejilion.sh | 30 +++++++++++------------ kr/kejilion.sh | 24 +++++++++---------- 3 files changed, 59 insertions(+), 59 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index bd47c0807..2d138634c 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -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 "App has been uninstalled" + echo "App uninstalled" send_stats "uninstall$docker_name" ;; @@ -3906,7 +3906,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" @@ -4003,7 +4003,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) @@ -4460,7 +4460,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}" } @@ -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 setup is completed!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is complete!${gl_bai}" } @@ -4778,7 +4778,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 @@ -5312,7 +5312,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 @@ -6537,7 +6537,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}" @@ -7479,7 +7479,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}------------------------" @@ -9257,7 +9257,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" ;; *) @@ -9311,7 +9311,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 @@ -9409,7 +9409,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 @@ -10294,7 +10294,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 @@ -10516,7 +10516,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 @@ -10567,7 +10567,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 @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -10671,7 +10671,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 @@ -10999,7 +10999,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11405,7 +11405,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 @@ -11632,7 +11632,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 @@ -11770,7 +11770,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 @@ -11824,7 +11824,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 @@ -12057,7 +12057,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 @@ -12187,7 +12187,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" @@ -12444,7 +12444,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 "------------" @@ -12636,8 +12636,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) @@ -13175,7 +13175,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 @@ -13873,7 +13873,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}" @@ -13990,7 +13990,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 185e3f058..48ce0eb8b 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 @@ -2111,7 +2111,7 @@ web_security() { ;; 22) - send_stats "高負荷で5秒シールド可能" + send_stats "高負荷により5秒シールドが可能" echo -e "${gl_huang}Web サイトは 5 分ごとに自動的に検出します。高負荷を検出すると自動的にシールドが開き、低負荷を検出すると5秒間自動的にシールドが閉じます。${gl_bai}" echo "--------------" echo "CFパラメータを取得します。" @@ -4460,7 +4460,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}" } @@ -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ログインの設定が完了しました!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定は完了です!${gl_bai}" } @@ -5139,7 +5139,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 "ウイルス、トロイの木馬、スパイウェア、悪意のあるスクリプト、その他の有害なソフトウェアが含まれます。" @@ -6537,7 +6537,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}" @@ -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 @@ -7329,7 +7329,7 @@ linux_docker() { echo "" echo "ボリューム操作" echo "------------------------" - echo "1. 新しいボリュームを作成します" + echo "1. 新しいボリュームを作成する" echo "2. 指定したボリュームを削除します" echo "3. すべてのボリュームを削除します" echo "------------------------" @@ -12187,8 +12187,8 @@ linux_work() { send_stats "バックエンドワークスペース" echo -e "バックエンドワークスペース" echo -e "システムは、バックグラウンドで永続的に実行できるワークスペースを提供し、長期的なタスクを実行するために使用できます。" - echo -e "SSH を切断しても、ワークスペース内のタスクは中断されず、バックグラウンド タスクは継続されます。" - echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、d だけを押してワークスペースを終了します。" + echo -e "SSH を切断しても、ワークスペース内のタスクは中断されず、タスクはバックグラウンドで残ります。" + echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、次に d を単独で押してワークスペースを終了します。" echo -e "${gl_kjlan}------------------------" echo "現在存在するワークスペースのリスト" echo -e "${gl_kjlan}------------------------" @@ -12636,8 +12636,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "最初にIPv6に切り替えました" - send_stats "最初にIPv6に切り替えました" + echo "IPv6優先に切り替えました" + send_stats "IPv6優先に切り替えました" ;; 3) @@ -13868,12 +13868,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}" @@ -13906,7 +13906,7 @@ while true; do 4) clear - send_stats "バックアップクラスタ" + send_stats "バックアップクラスター" echo -e "変更してください${gl_huang}/root/cluster/servers.py${gl_bai}ファイルをダウンロードしてバックアップを完了してください。" break_end ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index d86a9c43c..66c512504 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -2759,7 +2759,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 @@ -4460,7 +4460,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}" } @@ -5092,7 +5092,7 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "스캔할 디렉터리를 지정하십시오." + echo "스캔할 디렉터리를 지정하세요." return fi @@ -5598,7 +5598,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 "------------------------" @@ -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 @@ -9185,7 +9185,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 "------------------------" @@ -12187,7 +12187,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 "현재 존재하는 작업공간 목록" @@ -12300,7 +12300,7 @@ linux_work() { echo -e "SSH 상주 모드${tmux_sshd_status}" echo "SSH 연결을 연 후 바로 상주 모드로 들어가고 이전 작업 상태로 바로 돌아갑니다." echo "------------------------" - echo "1. 켜기 2. 끄기" + echo "1. 켜짐 2. 꺼짐" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -12636,8 +12636,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "먼저 IPv6로 전환됨" - send_stats "먼저 IPv6로 전환됨" + echo "IPv6 우선순위로 전환됨" + send_stats "IPv6 우선순위로 전환됨" ;; 3) @@ -13421,7 +13421,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}" @@ -13873,7 +13873,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}" From b254fd513e03a2fbd877bd622893720f0ee5c92f Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 7 Dec 2025 04:24:26 +0000 Subject: [PATCH 10/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202025-12-07=2004:24:26?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 54 +- jp/kejilion.sh | 1658 ++++++++--------- kr/kejilion.sh | 4732 ++++++++++++++++++++++++------------------------ tw/kejilion.sh | 224 +-- 4 files changed, 3334 insertions(+), 3334 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 2d138634c..14573157f 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -2540,7 +2540,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 @@ -2559,7 +2559,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 @@ -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 "App uninstalled" + echo "App has been uninstalled" send_stats "uninstall$docker_name" ;; @@ -3906,7 +3906,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" @@ -4003,7 +4003,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) @@ -4510,7 +4510,7 @@ 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 } @@ -6119,7 +6119,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 @@ -6189,7 +6189,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 @@ -7479,7 +7479,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}------------------------" @@ -9257,7 +9257,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" ;; *) @@ -9311,7 +9311,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 @@ -9409,7 +9409,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 @@ -10294,7 +10294,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 @@ -10516,7 +10516,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 @@ -10567,7 +10567,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 @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -10671,7 +10671,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 @@ -10999,7 +10999,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11405,7 +11405,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 @@ -11632,7 +11632,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 @@ -11770,7 +11770,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 @@ -11824,7 +11824,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 @@ -12057,7 +12057,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 @@ -12444,7 +12444,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 "------------" @@ -14175,7 +14175,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 48ce0eb8b..e14a01833 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}テクノロジー ライオン スクリプト ツールボックスへようこそ${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 @@ -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 "最低限必要なスペース:${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 @@ -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 @@ -261,14 +261,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" @@ -281,43 +281,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 } @@ -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}正在安装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 @@ -502,63 +502,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]) @@ -567,28 +567,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 "------------------------------------------------------------" @@ -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) @@ -622,8 +622,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) @@ -642,44 +642,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]) @@ -688,7 +688,7 @@ while true; do [Nn]) ;; *) - echo "選択が無効です。Y または N を入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -756,16 +756,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}" } @@ -777,27 +777,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 @@ -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ステータスを確認する + # 检查当前的 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,117 +872,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" } @@ -992,7 +992,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 @@ -1002,12 +1002,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 @@ -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_code 的 IP 区域文件失败" continue fi @@ -1052,7 +1052,7 @@ manage_country_rules() { iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP - echo "正常にブロックされました$country_codeIPアドレス" + echo "已成功阻止 $country_code 的 IP 地址" rm "${country_code,,}.zone" ;; @@ -1062,7 +1062,7 @@ manage_country_rules() { fi if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "エラー: ダウンロード$country_codeIPゾーンファイルが失敗しました" + echo "错误:下载 $country_code 的 IP 区域文件失败" 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_code 的 IP 地址" rm "${country_code,,}.zone" ;; @@ -1086,11 +1086,11 @@ manage_country_rules() { ipset destroy "$ipset_name" fi - echo "正常に削除されました$country_codeIPアドレス制限" + echo "已成功解除 $country_code 的 IP 地址限制" ;; *) - echo "使用法: manage_country_rules {block|allow|unblock} " + echo "用法: manage_country_rules {block|allow|unblock} " ;; esac done @@ -1111,42 +1111,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. 指定国における知的財産制限を解除する" + 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 @@ -1159,10 +1159,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 @@ -1175,40 +1175,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 @@ -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_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" ;; *) @@ -1250,23 +1250,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 @@ -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 @@ -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}" @@ -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 @@ -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 @@ -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,15 +1446,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 "" } @@ -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" @@ -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 "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 @@ -1542,7 +1542,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 @@ -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,8 +1616,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}完成" } @@ -1636,11 +1636,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" } @@ -1650,29 +1650,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_FILECF 情報は後で変更できます。" - 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 "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" \ @@ -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 @@ -1696,28 +1696,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 @@ -1733,23 +1733,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 @@ -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,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」を含む行の前に新しい定義を挿入します。 + # 插入新定义,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /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,11 +1881,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 @@ -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,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 @@ -1983,31 +1983,31 @@ nginx_gzip() { web_security() { - send_stats "LDNMP環境防御" + send_stats "LDNMP环境防御" while true; do check_f2b_status check_waf_status check_cf_mode clear - echo -e "サーバー Web サイト防御プログラム${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 "1. 安装防御程序" echo "------------------------" - echo "5. SSH 傍受記録の表示 6. Web サイト傍受記録の表示" - echo "7. 防御ルールのリストを表示します。 8. リアルタイム監視のログを表示します。" + echo "5. 查看SSH拦截记录 6. 查看网站拦截记录" + echo "7. 查看防御规则列表 8. 查看日志实时监控" echo "------------------------" - echo "11. インターセプトパラメータを設定します。 12. ブロックされたすべての IP をクリアします。" + echo "11. 配置拦截参数 12. 清除所有拉黑的IP" echo "------------------------" - echo "21. クラウドフレア モード 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 @@ -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 "クラウドフレアモード" - 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 @@ -2107,21 +2107,21 @@ 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后台,站点-安全性-事件中查看拦截记录" ;; 22) - send_stats "高負荷により5秒シールドが可能" - echo -e "${gl_huang}Web サイトは 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 @@ -2138,23 +2138,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) @@ -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 @@ -2198,21 +2198,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 @@ -2228,33 +2228,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 @@ -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 @@ -2278,23 +2278,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 @@ -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 @@ -2316,7 +2316,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP 環境が高パフォーマンス モードに設定されている" + echo "LDNMP环境已设置成 高性能模式" ;; 3) @@ -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 # } @@ -2386,7 +2386,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "訪問先住所:" +echo "访问地址:" ip_address @@ -2424,31 +2424,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 @@ -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,34 +2477,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 @@ -2514,7 +2514,7 @@ block_container_port() { fi - echo "IP+ポートはサービスへのアクセスをブロックされています" + echo "已阻止IP+端口访问该服务" save_iptables_rules } @@ -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 @@ -2554,17 +2554,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 +2575,7 @@ clear_container_rules() { fi - echo "IP+ポートによるサービスへのアクセスが許可されました" + echo "已允许IP+端口访问该服务" save_iptables_rules } @@ -2589,25 +2589,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 +2616,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 +2648,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,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. 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) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${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 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 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,19 +2860,19 @@ 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) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${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" @@ -3063,11 +3063,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 +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 @@ -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,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 @@ -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,16 +3185,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 +3206,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 @@ -3247,17 +3247,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 @@ -3280,14 +3280,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 @@ -3340,12 +3340,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//') @@ -3358,35 +3358,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 @@ -3395,15 +3395,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') @@ -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" {} + @@ -3442,10 +3442,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 @@ -3459,25 +3459,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 @@ -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 "公式サイト紹介:$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 @@ -3541,20 +3541,20 @@ while true; do panel_app_install add_app_id - send_stats "${panelname}インストール" + send_stats "${panelname}安装" ;; 2) panel_app_manage 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 @@ -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,17 +3620,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 @@ -3640,9 +3640,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 @@ -3662,17 +3662,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 を入力してください [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} @@ -3682,8 +3682,8 @@ remote_port = ${remote_port} EOF - # 生成された情報を出力する - echo "仕える$service_namefrpc.toml に正常に追加されました" + # 输出生成的信息 + echo "服务 $service_name 已成功添加到 frpc.toml" docker restart frpc @@ -3694,12 +3694,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 @@ -3709,7 +3709,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # ヘッダーを印刷します + # 打印表头 printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -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, \ @@ -3739,11 +3739,11 @@ list_forwarding_services() { type } - # 現在のサービス名を更新します + # 更新当前服务名称 if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 前回の値をクリア + # 清除之前的值 local_ip="" local_port="" remote_port="" @@ -3772,7 +3772,7 @@ list_forwarding_services() { } END { - # 最後のサービスに関する情報を出力します + # 打印最后一个服务的信息 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 @@ -3804,18 +3804,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 @@ -3824,7 +3824,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}" @@ -3851,7 +3851,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRPサーバー" + send_stats "FRP服务端" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3859,25 +3859,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 @@ -3885,7 +3885,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 +3895,7 @@ frps_panel() { donlond_frp frps add_app_id - echo "FRPサーバーを更新しました" + echo "FRP服务端已经更新完成" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3906,37 +3906,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服务状态" ;; *) @@ -3949,7 +3949,7 @@ frps_panel() { frpc_panel() { - send_stats "FRPクライアント" + send_stats "FRP客户端" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3957,10 +3957,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 @@ -3968,13 +3968,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 @@ -3982,7 +3982,7 @@ frpc_panel() { configure_frpc add_app_id - echo "FRPクライアントがインストールされています" + echo "FRP客户端已经安装完成" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -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,68 +4049,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. 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 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 をアンインストールしています..." - 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 \ @@ -4118,31 +4118,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" ;; *) @@ -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 @@ -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 @@ -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,13 +4243,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 @@ -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 "未使用の依存関係をクリーンアップします..." + 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 @@ -4327,26 +4327,26 @@ 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アドレス" + 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" @@ -4354,7 +4354,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,14 +4362,14 @@ 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 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 が 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/' \ @@ -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" @@ -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 @@ -4460,17 +4460,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 @@ -4488,7 +4488,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}" } @@ -4497,26 +4497,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 @@ -4527,41 +4527,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" @@ -4577,21 +4577,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 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 + read -e -p "请选择要重装的系统: " sys_choice case "$sys_choice" in 1) - send_stats "debian13を再インストールする" + send_stats "重装debian 13" dd_xitong_3 bash reinstall.sh debian 13 reboot @@ -4599,49 +4599,49 @@ dd_xitong() { ;; 2) - send_stats "debian12を再インストールする" + send_stats "重装debian 12" dd_xitong_1 bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "debian11を再インストールする" + send_stats "重装debian 11" dd_xitong_1 bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "debian10を再インストールする" + 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 @@ -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 @@ -4666,7 +4666,7 @@ dd_xitong() { ;; 23) - send_stats "alma10を再インストールする" + send_stats "重装alma10" dd_xitong_3 bash reinstall.sh almalinux 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 @@ -4714,7 +4714,7 @@ dd_xitong() { ;; 29) - send_stats "centos10を再インストールする" + send_stats "重装centos10" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4722,7 +4722,7 @@ dd_xitong() { ;; 30) - send_stats "centos9を再インストールする" + send_stats "重装centos9" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4730,7 +4730,7 @@ dd_xitong() { ;; 31) - send_stats "アルパインを再インストールする" + send_stats "重装alpine" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4738,7 +4738,7 @@ dd_xitong() { ;; 32) - send_stats "アーチを再インストールする" + send_stats "重装arch" dd_xitong_3 bash reinstall.sh arch reboot @@ -4746,7 +4746,7 @@ dd_xitong() { ;; 33) - send_stats "kaliを再インストールする" + send_stats "重装kali" dd_xitong_3 bash reinstall.sh kali reboot @@ -4754,7 +4754,7 @@ dd_xitong() { ;; 34) - send_stats "オープニューラーを再インストールする" + send_stats "重装openeuler" dd_xitong_3 bash reinstall.sh openeuler 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 "Feiniu を再インストールする" + send_stats "重装飞牛" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4778,7 +4778,7 @@ dd_xitong() { ;; 41) - send_stats "Windows 11を再インストールする" + send_stats "重装windows11" 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 "重装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 @@ -4802,7 +4802,7 @@ dd_xitong() { ;; 44) - send_stats "Windowsサーバー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サーバー22を再インストールします" + send_stats "重装windows server 22" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot @@ -4818,7 +4818,7 @@ dd_xitong() { ;; 46) - send_stats "Windowsサーバー19を再インストールします" + send_stats "重装windows server 19" dd_xitong_2 bash InstallNET.sh -windows 2019 -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 @@ -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 "------------------------" - 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) @@ -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 カーネルをアップグレードして BBR3 を有効にします。" + echo "仅支持Debian/Ubuntu" + echo "请备份数据,将为你升级Linux内核开启BBR3" echo "------------------------------------------------" - read -e -p "続行してもよろしいですか? (はい/いいえ):" choice + read -e -p "确定继续吗?(Y/N): " 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+') @@ -4949,17 +4949,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 +4968,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 } @@ -5009,37 +5009,37 @@ elrepo_install() { elrepo() { root_use - send_stats "Red Hat カーネル管理" + 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 "Red Hat カーネルをアンインストールする" + echo "elrepo内核已卸载。重启后生效" + send_stats "卸载红帽内核" server_reboot ;; @@ -5052,26 +5052,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 "続行してもよろしいですか? (はい/いいえ):" 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 +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 \ @@ -5092,19 +5092,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 +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 \ @@ -5122,8 +5122,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}" } @@ -5135,23 +5135,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 @@ -5160,7 +5160,7 @@ clamav() { ;; 2) - send_stats "重要なディレクトリのスキャン" + send_stats "重要目录扫描" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5168,8 +5168,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 +5186,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 +5212,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 +5253,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 +5294,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 } -# Webサイト構築最適化機能 +# 网站搭建优化函数 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 +5336,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 +5356,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 サイト最適化モード: 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 +5438,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 @@ -5447,17 +5447,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 } @@ -5467,29 +5467,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 +5511,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 +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}#" @@ -5535,9 +5535,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 +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 "有効にすると、重要なファイルを誤って削除することを防ぐために、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 +5615,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) @@ -5786,7 +5786,7 @@ linux_backup() { 3) delete_backup ;; *) break ;; esac - read -e -p "続行するには Enter キーを押してください..." + read -e -p "Enter を押して続行します..." done } @@ -5986,9 +5986,9 @@ list_partitions() { lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# パーティションのマウント +# パーティションをマウントする mount_partition() { - send_stats "パーティションのマウント" + send_stats "パーティションをマウントする" read -e -p "マウントするパーティションの名前を入力してください (例: sda1):" PARTITION # パーティションが存在するかどうかを確認する @@ -6007,7 +6007,7 @@ mount_partition() { MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションのマウント + # パーティションをマウントする mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then @@ -6138,7 +6138,7 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "続行するには Enter キーを押してください..." + read -e -p "Enter を押して続行します..." done } @@ -6425,7 +6425,7 @@ rsync_manager() { 0) break ;; *) echo "選択が無効です。もう一度お試しください。" ;; esac - read -e -p "続行するには Enter キーを押してください..." + read -e -p "Enter を押して続行します..." done } @@ -7186,7 +7186,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 ファイルを編集する" @@ -8028,7 +8028,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" ;; @@ -8815,7 +8815,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}------------------------" @@ -9082,7 +9082,7 @@ while true; do fi echo "" echo "------------------------" - echo "1. 使用方法" + echo "1. 使用する" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -12188,7 +12188,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}------------------------" @@ -13175,7 +13175,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 @@ -13990,7 +13990,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 "" @@ -14175,7 +14175,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 66c512504..d95435dd8 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}기술 사자 스크립트 도구 상자에 오신 것을 환영합니다${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 "위의 약관에 동의하십니까? (예/아니요):" 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 @@ -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 "최소 필요 공간:${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 @@ -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 @@ -261,14 +261,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" @@ -281,43 +281,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 } @@ -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}도커 환경 설치 중...${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 @@ -502,63 +502,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]) @@ -567,28 +567,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 "------------------------------------------------------------" @@ -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) @@ -622,8 +622,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) @@ -642,44 +642,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]) @@ -688,7 +688,7 @@ while true; do [Nn]) ;; *) - echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -756,16 +756,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}" } @@ -777,27 +777,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 @@ -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 상태 확인 + # 检查当前的 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,117 +872,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" } @@ -992,7 +992,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 @@ -1002,12 +1002,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 @@ -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 규칙을 관리하는 기능 +# 管理国家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_code 的 IP 区域文件失败" continue fi @@ -1052,7 +1052,7 @@ manage_country_rules() { iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP - echo "성공적으로 차단되었습니다$country_codeIP 주소" + echo "已成功阻止 $country_code 的 IP 地址" rm "${country_code,,}.zone" ;; @@ -1062,7 +1062,7 @@ manage_country_rules() { fi if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "오류: 다운로드$country_codeIP 영역 파일 실패" + echo "错误:下载 $country_code 的 IP 区域文件失败" 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_code 的 IP 地址" rm "${country_code,,}.zone" ;; @@ -1086,11 +1086,11 @@ manage_country_rules() { ipset destroy "$ipset_name" fi - echo "성공적으로 제거되었습니다$country_codeIP 주소 제한" + echo "已成功解除 $country_code 的 IP 地址限制" ;; *) - echo "사용법: prepare_country_rules {block|allow|unblock} " + echo "用法: manage_country_rules {block|allow|unblock} " ;; esac done @@ -1111,42 +1111,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. 阻止指定国家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 @@ -1159,10 +1159,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 @@ -1175,40 +1175,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 @@ -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_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" ;; *) @@ -1250,23 +1250,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 - # 이전 /swap 파일 삭제 + # 删除旧的 /swapfile rm -f /swapfile - # 새로운 스왑 파티션 생성 + # 创建新的 swap 分区 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 @@ -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}" @@ -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 @@ -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 @@ -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,15 +1446,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 "" } @@ -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" @@ -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 "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 @@ -1542,7 +1542,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 @@ -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,8 +1616,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}完成" } @@ -1636,11 +1636,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" } @@ -1650,29 +1650,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의 캐시를 지워야 합니까? (예/아니요):" 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 "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" \ @@ -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 @@ -1696,28 +1696,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 @@ -1733,23 +1733,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 @@ -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" - # "HappyPublishing"이 포함된 줄 앞에 새 정의를 삽입합니다. + # 插入新定义,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_MEMORY_LIMIT', '$MEMORY_LIMIT');\ndefine('WP_MAX_MEMORY_LIMIT', '$MAX_MEMORY_LIMIT');" \ ' /Happy publishing/ { @@ -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" - # "HappyPublishing"이 포함된 줄 앞에 새 정의를 삽입합니다. + # 插入新定义,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /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,11 +1881,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 @@ -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,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 @@ -1983,31 +1983,31 @@ nginx_gzip() { web_security() { - send_stats "LDNMP 환경 방어" + send_stats "LDNMP环境防御" while true; do check_f2b_status 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 "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 @@ -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 "클라우드플레어 모드" - 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 @@ -2107,21 +2107,21 @@ 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后台,站点-安全性-事件中查看拦截记录" ;; 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 @@ -2138,23 +2138,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) @@ -2179,10 +2179,10 @@ 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 ';') -# 값에 따라 모드 정보 설정 +# 根据值设置模式信息 if [ "$current_value" = "8" ]; then mode_info=" 高性能模式" else @@ -2198,21 +2198,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 @@ -2228,33 +2228,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 @@ -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 @@ -2278,23 +2278,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 @@ -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 @@ -2316,7 +2316,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP 환경이 고성능 모드로 설정되었습니다." + echo "LDNMP环境已设置成 高性能模式" ;; 3) @@ -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 # } @@ -2386,7 +2386,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "방문 주소:" +echo "访问地址:" ip_address @@ -2424,31 +2424,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 +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,34 +2477,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 @@ -2514,7 +2514,7 @@ block_container_port() { fi - echo "IP+포트가 서비스 접근을 차단했습니다." + echo "已阻止IP+端口访问该服务" save_iptables_rules } @@ -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 @@ -2554,17 +2554,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 +2575,7 @@ clear_container_rules() { fi - echo "IP+포트로 서비스 접속이 허용되었습니다" + echo "已允许IP+端口访问该服务" save_iptables_rules } @@ -2589,25 +2589,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 +2616,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 +2648,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,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. 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) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter 키를 누르면 기본적으로 사용됩니다.${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 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 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 "https://가 없는 도메인 이름 형식 example.com" + 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,19 +2860,19 @@ 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) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter 키를 누르면 기본적으로 사용됩니다.${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 "https://가 없는 도메인 이름 형식 example.com" + 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" @@ -3063,11 +3063,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 +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 @@ -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,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 @@ -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,16 +3185,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 +3206,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 @@ -3247,17 +3247,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 @@ -3280,14 +3280,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 @@ -3340,12 +3340,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//') @@ -3358,35 +3358,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 @@ -3395,15 +3395,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') @@ -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 "연결된 사이트 만들기" - 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 @@ -3459,25 +3459,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 @@ -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 ;; @@ -3518,21 +3518,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 @@ -3541,20 +3541,20 @@ while true; do panel_app_install add_app_id - send_stats "${panelname}설치하다" + send_stats "${panelname}安装" ;; 2) panel_app_manage 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 @@ -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,17 +3620,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 @@ -3640,9 +3640,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 @@ -3662,17 +3662,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를 입력하십시오. [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} @@ -3682,8 +3682,8 @@ remote_port = ${remote_port} EOF - # 생성된 정보를 출력 - echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." + # 输出生成的信息 + echo "服务 $service_name 已成功添加到 frpc.toml" docker restart frpc @@ -3694,12 +3694,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 @@ -3709,7 +3709,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # 헤더 인쇄 + # 打印表头 printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -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, \ @@ -3739,11 +3739,11 @@ list_forwarding_services() { type } - # 현재 서비스 이름 업데이트 + # 更新当前服务名称 if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 이전 값 지우기 + # 清除之前的值 local_ip="" local_port="" remote_port="" @@ -3772,7 +3772,7 @@ list_forwarding_services() { } END { - # 마지막 서비스에 대한 정보 인쇄 + # 打印最后一个服务的信息 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 @@ -3804,18 +3804,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 @@ -3824,7 +3824,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}" @@ -3851,7 +3851,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRP 서버" + send_stats "FRP服务端" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3859,25 +3859,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 @@ -3885,7 +3885,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 +3895,7 @@ frps_panel() { donlond_frp frps add_app_id - echo "FRP 서버가 업데이트되었습니다" + echo "FRP服务端已经更新完成" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3906,37 +3906,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 "https://가 없는 도메인 이름 형식 example.com" + 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服务状态" ;; *) @@ -3949,7 +3949,7 @@ frps_panel() { frpc_panel() { - send_stats "FRP 클라이언트" + send_stats "FRP客户端" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3957,10 +3957,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 @@ -3968,13 +3968,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 @@ -3982,7 +3982,7 @@ frpc_panel() { configure_frpc add_app_id - echo "FRP 클라이언트가 설치되었습니다" + echo "FRP客户端已经安装完成" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -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,68 +4049,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 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 제거 중..." - 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 \ @@ -4118,31 +4118,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" ;; *) @@ -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 @@ -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 @@ -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,13 +4243,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 @@ -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 "사용하지 않는 종속성을 정리합니다..." + 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 @@ -4327,26 +4327,26 @@ 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 주소" + 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" @@ -4354,7 +4354,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,14 +4362,14 @@ 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 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이 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/' \ @@ -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" @@ -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 @@ -4460,17 +4460,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 @@ -4488,7 +4488,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}" } @@ -4497,26 +4497,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}ROOT 로그인 설정이 완료되었습니다!${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 @@ -4527,41 +4527,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" @@ -4577,21 +4577,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 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 + 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 @@ -4599,49 +4599,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 "우분투 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 @@ -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 @@ -4666,7 +4666,7 @@ dd_xitong() { ;; 23) - send_stats "alma10 재설치" + send_stats "重装alma10" dd_xitong_3 bash reinstall.sh almalinux 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 @@ -4714,7 +4714,7 @@ dd_xitong() { ;; 29) - send_stats "centos10 재설치" + send_stats "重装centos10" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4722,7 +4722,7 @@ dd_xitong() { ;; 30) - send_stats "centos9 재설치" + send_stats "重装centos9" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4730,7 +4730,7 @@ dd_xitong() { ;; 31) - send_stats "알파인 재설치" + send_stats "重装alpine" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4738,7 +4738,7 @@ dd_xitong() { ;; 32) - send_stats "아치 재설치" + send_stats "重装arch" dd_xitong_3 bash reinstall.sh arch reboot @@ -4746,7 +4746,7 @@ dd_xitong() { ;; 33) - send_stats "칼리 재설치" + send_stats "重装kali" dd_xitong_3 bash reinstall.sh kali reboot @@ -4754,7 +4754,7 @@ dd_xitong() { ;; 34) - send_stats "openeuler 다시 설치" + send_stats "重装openeuler" dd_xitong_3 bash reinstall.sh openeuler reboot @@ -4762,7 +4762,7 @@ dd_xitong() { ;; 35) - send_stats "Openuse 다시 설치" + send_stats "重装opensuse" dd_xitong_3 bash reinstall.sh opensuse reboot @@ -4770,7 +4770,7 @@ dd_xitong() { ;; 36) - send_stats "Feiniu 재설치" + send_stats "重装飞牛" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4778,7 +4778,7 @@ dd_xitong() { ;; 41) - send_stats "윈도우 11 재설치" + send_stats "重装windows11" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -4787,14 +4787,14 @@ dd_xitong() { 42) dd_xitong_2 - send_stats "윈도우 10 재설치" + 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 @@ -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 "윈도우 서버 22 재설치" + send_stats "重装windows server 22" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot @@ -4818,7 +4818,7 @@ dd_xitong() { ;; 46) - send_stats "윈도우 서버 19 재설치" + send_stats "重装windows server 19" dd_xitong_2 bash InstallNET.sh -windows 2019 -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 "------------------------" - 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) @@ -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 "데비안/우분투만 지원" - echo "데이터를 백업해 주시면 Linux 커널을 업그레이드하고 BBR3을 활성화하겠습니다." + echo "仅支持Debian/Ubuntu" + echo "请备份数据,将为你升级Linux内核开启BBR3" echo "------------------------------------------------" - read -e -p "계속하시겠습니까? (예/아니요):" choice + read -e -p "确定继续吗?(Y/N): " 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+') @@ -4949,17 +4949,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 +4968,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 } @@ -5009,37 +5009,37 @@ elrepo_install() { elrepo() { root_use - send_stats "Red Hat 커널 관리" + 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 "Red Hat 커널 제거" + echo "elrepo内核已卸载。重启后生效" + send_stats "卸载红帽内核" server_reboot ;; @@ -5052,26 +5052,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 "계속하시겠습니까? (예/아니요):" 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 +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 \ @@ -5092,19 +5092,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 +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 run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5122,8 +5122,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}" } @@ -5135,23 +5135,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 @@ -5160,7 +5160,7 @@ clamav() { ;; 2) - send_stats "중요한 디렉토리 스캔" + send_stats "重要目录扫描" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5168,8 +5168,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 +5186,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 +5212,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 +5253,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 +5294,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 +5336,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 +5356,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 @@ -5438,7 +5438,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 @@ -5447,17 +5447,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 } @@ -5467,29 +5467,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 +5511,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 +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}#" @@ -5535,9 +5535,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 +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 "활성화한 후에는 중요한 파일이 실수로 삭제되는 것을 방지하기 위해 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 +5615,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 +5623,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 "휴지통을 비우시겠습니까? [예/아니요]:" confirm + read -e -p "确认清空回收站?[y/n]: " confirm if [[ "$confirm" == "y" ]]; then trash-empty - echo "휴지통이 비워졌습니다." + echo "回收站已清空。" fi ;; *) @@ -5650,23 +5650,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 "- Enter를 눌러 기본 디렉터리(/etc/usr/home)를 사용합니다." - read -r -p "백업할 디렉터리를 입력하십시오(여러 디렉터리를 공백으로 구분하고 Enter를 눌러 기본 디렉터리를 사용하십시오)." 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" # 配置文件和软件包配置 @@ -5674,119 +5674,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 } @@ -5798,56 +5798,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를 두 번 누르세요)." + 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" @@ -5856,89 +5856,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 @@ -5950,21 +5950,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 } @@ -5980,156 +5980,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? (예/아니요):" 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 ;; @@ -6138,64 +6138,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 "- 원격 디렉터리: /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 "원격 user@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를 두 번 누르세요)." + 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" @@ -6203,63 +6203,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 @@ -6270,51 +6270,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 @@ -6322,32 +6322,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="" @@ -6355,66 +6355,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 ;; @@ -6423,9 +6423,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "선택이 잘못되었습니다. 다시 시도해 주세요." ;; + *) echo "无效的选择,请重试。" ;; esac - read -e -p "계속하려면 Enter를 누르세요..." + read -e -p "按回车键继续..." done } @@ -6440,7 +6440,7 @@ rsync_manager() { linux_info() { clear - send_stats "시스템 정보 쿼리" + send_stats "系统信息查询" ip_address @@ -6490,41 +6490,41 @@ 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" - 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 @@ -6537,111 +6537,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 통신 연결 도구" - 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}레인저 파일 관리 도구" - 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) @@ -6649,7 +6649,7 @@ linux_tools() { install btop clear btop - send_stats "btop 설치" + send_stats "安装btop" ;; 12) clear @@ -6658,7 +6658,7 @@ linux_tools() { clear ranger cd ~ - send_stats "레인저 설치" + send_stats "安装ranger" ;; 13) clear @@ -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 @@ -6694,7 +6694,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "나노 설치" + send_stats "安装nano" ;; @@ -6705,7 +6705,7 @@ linux_tools() { clear git --help cd ~ - send_stats "자식 설치" + send_stats "安装git" ;; 21) @@ -6713,67 +6713,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 "닌베이더 설치" + 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 컬 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) @@ -6781,7 +6781,7 @@ linux_tools() { ;; *) - echo "입력이 잘못되었습니다!" + echo "无效的输入!" ;; esac break_end @@ -6795,27 +6795,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 @@ -6857,21 +6857,21 @@ docker_ssh_migration() { list_backups() { local BACKUP_ROOT="/tmp" - 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 "도커 백업" + 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 "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " 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,28 +6892,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도커 작성 컨테이너입니다${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 -e -p "작성 디렉터리가 감지되지 않습니다. 경로를 수동으로 입력하세요." project_dir + 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}Compose 项目 [$project_name] 已备份过,跳过重复打包...${NC}" continue fi @@ -6921,137 +6921,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 恢复: $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}" + 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 "도커 복원" - read -e -p "복원할 백업 디렉터리를 입력하십시오:" BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉터리가 존재하지 않습니다.${NC}"; return; } + send_stats "Docker还原" + 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 프로젝트 복원 우선순위 지정 --------- + # --------- 优先还原 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 프로젝트의 컨테이너가 이미 실행 중인지 확인하세요. + # 检查该 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 -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" - 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 @@ -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 @@ -7095,68 +7095,68 @@ docker_ssh_migration() { # ---------------------------- - # 이주하다 + # 迁移 # ---------------------------- migrate_docker() { - send_stats "도커 마이그레이션" + 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 - 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" - 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; } + 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}" } # ---------------------------- - # 메인 메뉴 + # 主菜单 # ---------------------------- 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. 도커 프로젝트 백업" - echo -e "2. 도커 프로젝트 마이그레이션" - echo -e "3. 도커 프로젝트 복원" - 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 -e -p "선택하세요:" choice + read -e -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 @@ -7173,38 +7173,38 @@ linux_docker() { while true; do clear - # send_stats "도커 관리" - 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 전역 상태 보기${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 "도커 환경 설치" + send_stats "安装docker环境" install_add_docker ;; @@ -7215,22 +7215,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 "Docker 볼륨:${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 "" @@ -7245,8 +7245,8 @@ linux_docker() { 5) while true; do clear - send_stats "도커 네트워크 관리" - echo "도커 네트워크 목록" + send_stats "Docker网络管理" + echo "Docker网络列表" echo "------------------------------------------------------------" docker network ls echo "" @@ -7270,36 +7270,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 @@ -7308,8 +7308,8 @@ linux_docker() { ;; 4) - send_stats "네트워크 삭제" - read -e -p "삭제할 네트워크 이름을 입력하세요:" dockernetwork + send_stats "删除网络" + read -e -p "请输入要删除的网络名: " dockernetwork docker network rm $dockernetwork ;; @@ -7323,29 +7323,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 @@ -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]) @@ -7363,7 +7363,7 @@ linux_docker() { [Nn]) ;; *) - echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7376,7 +7376,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]) @@ -7385,13 +7385,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) ;; @@ -7407,13 +7407,13 @@ linux_docker() { 11) clear - send_stats "도커 v6 켜짐" + send_stats "Docker v6 开" docker_ipv6_on ;; 12) clear - send_stats "도커 v6 닫기" + send_stats "Docker v6 关" docker_ipv6_off ;; @@ -7424,7 +7424,7 @@ linux_docker() { 20) clear - send_stats "도커 제거" + 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,151 +7462,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}예우 스트리밍 미디어 잠금 해제 감지" - 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 삼중 네트워크 백홀 회선 테스트" - 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 세 개의 네트워크 라인 테스트" - 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}벤치 성능 테스트" - 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 "예우 스트리밍 미디어 잠금 해제 감지" + 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 "초고속 트리플 네트워크 속도 테스트" + 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 "벤치 성능 테스트" + 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 ;; @@ -7616,7 +7616,7 @@ linux_test() { ;; *) - echo "입력이 잘못되었습니다!" + echo "无效的输入!" ;; esac break_end @@ -7632,51 +7632,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}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 "설치하시겠습니까? (예/아니요):" 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 코어 수와 점유율을 입력하라는 메시지를 표시합니다. 사용자가 Enter 키를 누르면 기본값이 사용됩니다. - 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容器 docker run -itd --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ @@ -7684,14 +7684,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 ;; @@ -7699,20 +7699,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 "계속하시겠습니까? (예/아니요):" 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. 우분투20.04:" sys_choice + read -e -p "请选择要重装的系统: 1. Debian12 | 2. Ubuntu20.04 : " sys_choice case "$sys_choice" in 1) @@ -7724,28 +7724,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 - 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) @@ -7756,15 +7756,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 +7785,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 +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}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 포럼 웹사이트 설치${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 +7872,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 +7898,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 +7934,20 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "데이터베이스 주소: mysql" - echo "사용자 이름:$dbuse" - echo "비밀번호:$dbusepasswd" - echo "데이터베이스 이름:$dbname" - echo "레디스 호스트: 레디스" + echo "数据库地址: mysql" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库名: $dbname" + echo "redis主机: redis" ;; 5) clear - # AppleCMS + # 苹果CMS webname="苹果CMS" - send_stats "설치하다$webname" - echo "배포 시작$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7973,24 +7973,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 +8011,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 "레디스 주소 : 레디스" - echo "redis 비밀번호: 기본적으로 입력되지 않음" - echo "레디스 포트: 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论坛 webname="flarum论坛" - send_stats "설치하다$webname" - echo "배포 시작$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8075,12 +8075,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 +8088,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 +8113,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 +8126,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 +8152,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 +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格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8193,20 +8193,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 +8217,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 +8235,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로 끝나는 압축 패키지여야 합니다. Pagoda/1panel 백업 데이터 가져오기를 지원하려면 /home/ 디렉토리에 넣으십시오." - 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 +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 @@ -8278,12 +8278,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 +8296,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 +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" @@ -8332,11 +8332,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 +8356,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 +8379,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 +8397,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 +8431,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 +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格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " 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 "请输入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,23 +8492,23 @@ 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 "백업 데이터를 원격 서버로 전송하시겠습니까? (예/아니요):" choice + echo "备份文件已创建: /home/$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 /home/*.tar.gz | head -1) @@ -8516,9 +8516,9 @@ 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 "文件已传送至远程服务器home目录。" else - echo "전송할 파일을 찾을 수 없습니다." + echo "未找到要传送的文件。" fi break ;; @@ -8526,7 +8526,7 @@ linux_ldnmp() { break ;; *) - echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." + echo "无效的选择,请输入 Y 或 N。" ;; esac done @@ -8534,9 +8534,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 @@ -8546,18 +8546,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 ;; *) @@ -8571,19 +8571,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 "최신 백업을 복원하려면 Enter 키를 누르고, 지정된 백업을 복원하려면 백업 파일 이름을 입력하고, 종료하려면 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 @@ -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 ;; @@ -8620,11 +8620,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,13 +8644,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 @@ -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" - 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)(최신 버전을 얻으려면 Enter 키를 누르세요):" 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 @@ -8709,8 +8709,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 +8721,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 @@ -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]) @@ -8769,7 +8769,7 @@ linux_ldnmp() { ;; *) - echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -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..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8813,71 +8813,71 @@ while true; do fi done - 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}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}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}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}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 패널 탐색 패널${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}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}도커 가속 스테이션${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}라마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}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}비트워든 비밀번호 관리자${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}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}코마리 서버 모니터링 도구${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}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}종이 없는 문서 관리 플랫폼${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}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}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 @@ -9030,8 +9030,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,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "나타 빌드" + send_stats "搭建哪吒" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,20 +9073,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 "哪吒监控 $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 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) @@ -9143,7 +9143,7 @@ while true; do ;; 9|mail) - send_stats "우체국을 짓다" + send_stats "搭建邮局" clear install telnet local app_id="9" @@ -9153,44 +9153,44 @@ 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}}' 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 + 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" @@ -9200,7 +9200,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "계속하려면 아무 키나 누르세요..." + echo "按任意键继续..." read -n 1 -s -r -p "" install jq @@ -9219,9 +9219,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 "" @@ -9244,9 +9244,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 "" ;; @@ -9257,7 +9257,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "앱이 제거되었습니다." + echo "应用已卸载" ;; *) @@ -9291,7 +9291,7 @@ while true; do clear ip_address - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -9301,7 +9301,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 } @@ -9311,7 +9311,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "앱이 제거되었습니다." + echo "应用已卸载" } docker_app_plus @@ -9395,7 +9395,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -9409,7 +9409,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 @@ -9554,7 +9554,7 @@ while true; do ;; 19|safeline) - send_stats "천둥 웅덩이를 만들어라" + send_stats "搭建雷池" local app_id="19" local docker_name=safeline-mgt @@ -9562,20 +9562,20 @@ while true; do while true; do check_docker_app clear - echo -e "썬더 풀 서비스$check_docker" - echo "레이치(Leichi)는 창팅테크놀로지(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}}' 2>/dev/null | grep -q "$docker_name"; 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) @@ -9585,7 +9585,7 @@ while true; do add_app_id clear - echo "Leichi WAF 패널이 설치되었습니다." + echo "雷池WAF面板已经安装完成" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9598,7 +9598,7 @@ while true; do add_app_id clear - echo "Leichi WAF 패널이 업데이트되었습니다." + echo "雷池WAF面板已经更新完成" check_docker_app_ip ;; 3) @@ -9609,7 +9609,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" ;; *) @@ -9728,8 +9728,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 \ @@ -10017,7 +10017,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" @@ -10070,7 +10070,7 @@ while true; do ;; 38|xiaoya) - send_stats "Xiaoya 가족 버킷" + send_stats "小雅全家桶" clear install_docker check_disk_space 1 @@ -10274,9 +10274,9 @@ while true; do prometheus_install clear ip_address - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip - echo "초기 사용자 이름과 비밀번호는 admin입니다." + echo "初始用户名密码均为: admin" } docker_app_update() { @@ -10294,7 +10294,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "앱이 제거되었습니다." + echo "应用已卸载" } docker_app_plus @@ -10381,7 +10381,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 ;; @@ -10501,7 +10501,7 @@ while true; do docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -10516,7 +10516,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 @@ -10544,7 +10544,7 @@ while true; do docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -10559,7 +10559,7 @@ while true; do docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -10567,7 +10567,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 @@ -10588,17 +10588,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 "应用已更新" } @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "앱이 제거되었습니다." + echo "应用已卸载" } docker_app_plus @@ -10655,7 +10655,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 } @@ -10671,7 +10671,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 @@ -10933,7 +10933,7 @@ while true; do docker_rum() { - read -e -p "LibreTV 로그인 비밀번호 설정:" app_passwd + read -e -p "设置LibreTV的登录密码: " app_passwd docker run -d \ --name libretv \ @@ -10967,9 +10967,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 @@ -10985,7 +10985,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -10999,7 +10999,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 @@ -11072,8 +11072,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 \ @@ -11170,11 +11170,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) @@ -11183,17 +11183,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 } @@ -11203,7 +11203,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11288,7 +11288,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 \ @@ -11392,7 +11392,7 @@ while true; do docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -11405,7 +11405,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 @@ -11566,7 +11566,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 @@ -11618,7 +11618,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -11632,7 +11632,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 @@ -11707,8 +11707,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} \ @@ -11756,7 +11756,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -11770,7 +11770,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 @@ -11810,7 +11810,7 @@ while true; do block_container_port "$docker_name" "$ipv4_address" clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -11824,7 +11824,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 @@ -11842,9 +11842,9 @@ 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 + read -e -p "请输入 WireGuard 网段 (默认 10.13.13.0): " NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11914,18 +11914,18 @@ while true; do sleep 2 echo - echo -e "${gl_huang}모든 클라이언트 QR 코드 구성:${gl_bai}" + 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}" + 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을 다운로드하고 위의 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}${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 } @@ -11953,16 +11953,16 @@ while true; do local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" - # 디렉터리가 없으면 생성 + # 创建目录(如果不存在) mkdir -p "$(dirname "$CONFIG_FILE")" - echo "클라이언트 구성을 붙여넣고 Enter를 두 번 눌러 저장하세요." + echo "请粘贴你的客户端配置,连续按两次回车保存:" - # 변수 초기화 + # 初始化变量 input="" empty_line_count=0 - # 사용자 입력을 한 줄씩 읽습니다. + # 逐行读取用户输入 while IFS= read -r line; do if [[ -z "$line" ]]; then ((empty_line_count++)) @@ -11975,10 +11975,10 @@ while true; do fi done - # 구성 파일 쓰기 + # 写入配置文件 echo "$input" > "$CONFIG_FILE" - echo "클라이언트 구성이 다음에 저장되었습니다.$CONFIG_FILE" + echo "客户端配置已保存到 $CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12023,10 +12023,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 @@ -12043,7 +12043,7 @@ while true; do docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -12057,7 +12057,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 @@ -12097,24 +12097,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" - read -e -p "백업 데이터를 원격 서버로 전송하시겠습니까? (예/아니요):" choice + 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) @@ -12122,14 +12122,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 등 웹사이트 구축 패널의 데이터 백업은 포함되지 않습니다." + echo "注意: 目前备份仅包含docker项目,不包含宝塔,1panel等建站面板的数据备份。" break ;; esac @@ -12139,29 +12139,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 "최신 백업을 복원하려면 Enter 키를 누르고, 지정된 백업을 복원하려면 백업 파일 이름을 입력하고, 종료하려면 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 ;; @@ -12184,35 +12184,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 @@ -12220,7 +12220,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "작업공간 시작$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -12228,63 +12228,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 ;; @@ -12296,21 +12296,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 ;; @@ -12326,29 +12326,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 "다음과 같이 백그라운드에서 실행하려는 명령을 입력하십시오. 컬 -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 @@ -12373,54 +12373,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}기본 호스트 확인${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}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 @@ -12428,34 +12428,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 "현재 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 @@ -12488,7 +12488,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 @@ -12517,55 +12517,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 @@ -12584,8 +12584,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 @@ -12600,51 +12600,51 @@ 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 "------------------------" 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 "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 우선순위로 전환됨" + 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 수리" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; *) @@ -12662,43 +12662,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 "已设置自定义虚拟内存" ;; *) @@ -12711,8 +12711,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 @@ -12723,62 +12723,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" ;; @@ -12791,50 +12791,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 "" @@ -12842,46 +12842,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. 美国西部时间 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 @@ -12924,21 +12924,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 @@ -12956,11 +12956,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 @@ -12968,32 +12968,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 @@ -13001,62 +13001,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 # 跳出循环,退出菜单 @@ -13068,32 +13068,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 # 跳出循环,退出菜单 @@ -13104,24 +13104,24 @@ EOF 22) root_use - send_stats "SSH 방어" + 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 -e "SSH防御程序 $check_f2b_status" + 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) f2b_install_sshd @@ -13143,7 +13143,7 @@ EOF 9) remove fail2ban rm -rf /etc/fail2ban - echo "Fail2Ban 방어 프로그램이 제거되었습니다." + echo "Fail2Ban防御程序已卸载" break ;; *) @@ -13156,47 +13156,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 ~ @@ -13209,15 +13209,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 @@ -13230,40 +13230,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 @@ -13279,18 +13279,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 로봇 API 및 사용자 ID를 구성해야 합니다." - echo "임계값에 도달하면 경고 메시지가 사용자에게 전송됩니다." - echo -e "${gl_hui}- 트래픽에 관해서는 서버를 다시 시작하면 다시 계산됩니다 -${gl_bai}" - read -e -p "계속하시겠습니까? (예/아니요):" 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 @@ -13312,7 +13312,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 @@ -13323,21 +13323,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 @@ -13381,7 +13381,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; } @@ -13404,62 +13404,62 @@ EOF 41) clear - send_stats "메시지 보드" - echo "Technology Lion 공식 게시판을 방문해 보세요. 스크립트에 대한 아이디어가 있으시면 교환 메시지를 남겨주세요!" + send_stats "留言板" + echo "访问科技lion官方留言板,您对脚本有任何想法欢迎留言交流!" echo "https://board.kejilion.pro" - echo "공개 비밀번호: kejilion.sh" + echo "公共密码: kejilion.sh" ;; 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 "원클릭 유지 관리를 원하시나요? (예/아니요):" 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) @@ -13476,25 +13476,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 @@ -13502,7 +13502,7 @@ EOF 99) clear - send_stats "시스템을 다시 시작하세요" + send_stats "重启系统" server_reboot ;; 100) @@ -13518,32 +13518,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 @@ -13559,11 +13559,11 @@ EOF 102) clear - send_stats "기술 사자 스크립트 제거" - echo "기술 사자 스크립트 제거" + send_stats "卸载科技lion脚本" + echo "卸载科技lion脚本" echo "------------------------------------------------" - echo "kejilion 스크립트는 다른 기능에 영향을 주지 않고 완전히 제거됩니다." - read -e -p "계속하시겠습니까? (예/아니요):" choice + echo "将彻底卸载kejilion脚本,不影响你其他功能" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) @@ -13571,16 +13571,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 ;; @@ -13590,7 +13590,7 @@ EOF ;; *) - echo "입력이 잘못되었습니다!" + echo "无效的输入!" ;; esac break_end @@ -13608,187 +13608,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. 解压文件目录 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 @@ -14086,15 +14086,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 ;; *) @@ -14116,41 +14116,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}Eudemons Parlu 서버 오픈 스크립트" +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_info ;; - 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 ;; @@ -14161,13 +14161,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "Eudemons Parlu 서버 오픈 스크립트" ; 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 @@ -14175,70 +14175,70 @@ 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 제거 nano wget | k 델 나노 wget | k 나노 wget 제거 | k 나노 wget 제거" -echo "시스템 k 업데이트 업데이트 | 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 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 "도커 관리 플레인 k 도커" -echo "docker 환경 설치 k docker 설치 |k docker 설치" -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 "역방향 프록시 설치 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 즐겨찾기 | k 명령 즐겨찾기" -echo "애플리케이션 시장 관리 k app" -echo "신청번호의 빠른 관리 k app 26 | k 앱 1패널 | k 앱 npm" -echo "시스템 정보 표시 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" +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 "显示系统信息 k info" } 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|更新) @@ -14272,7 +14272,7 @@ else rsync_run) shift - send_stats "예약된 rsync 동기화" + send_stats "定时rsync同步" run_task "$@" ;; @@ -14291,7 +14291,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" @@ -14304,13 +14304,13 @@ else swap) shift - send_stats "가상 메모리를 빠르게 설정하세요" + send_stats "快速设置虚拟内存" add_swap "$@" ;; time|时区) shift - send_stats "시간대를 빠르게 설정" + send_stats "快速设置时区" set_timedate "$@" ;; @@ -14358,42 +14358,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 @@ -14403,15 +14403,15 @@ else shift case $1 in install|安装) - send_stats "도커를 빠르게 설치하세요" + send_stats "快捷安装docker" install_docker ;; ps|容器) - send_stats "빠른 컨테이너 관리" + send_stats "快捷容器管理" docker_ps ;; img|镜像) - send_stats "빠른 이미지 관리" + send_stats "快捷镜像管理" docker_image ;; *) @@ -14438,7 +14438,7 @@ else app) shift - send_stats "신청$@" + send_stats "应用$@" linux_panel "$@" ;; diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 05b2db1f1..04cbe6ac4 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -13981,32 +13981,32 @@ 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 "------------------------" -echo -e "${gl_huang}搬瓦工 49刀每季 美國CN2GIA 日本軟銀 2核心 1G內存 20G硬盤 1T流量每月${gl_bai}" -echo -e "${gl_bai}網址: https://bandwagonhost.com/aff.php?aff=69004&pid=87${gl_bai}" +echo -e "${gl_huang}搬瓦工 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刀每季 美國CN2GIA 1核心 2G內存 20G硬盤 800G流量每月${gl_bai}" -echo -e "${gl_bai}網址: https://www.dmit.io/aff.php?aff=4966&pid=100${gl_bai}" +echo -e "${gl_lan}DMIT 28刀每季 美国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刀每月 東京軟銀 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 -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&?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 -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 "科技lion周邊" +echo -e "科技lion周边" 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 "" } @@ -14017,24 +14017,24 @@ echo "" kejilion_update() { -send_stats "腳本更新" +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}" - send_stats "腳本已經最新了,無需更新" + echo -e "${gl_lv}你已经是最新版本!${gl_huang}v$sh_v${gl_bai}" + send_stats "脚本已经最新了,无需更新" else - echo "發現新版本!" - echo -e "當前版本 v$sh_v最新版本${gl_huang}v$sh_v_new${gl_bai}" + echo "发现新版本!" + echo -e "当前版本 v$sh_v 最新版本 ${gl_huang}v$sh_v_new${gl_bai}" fi @@ -14043,15 +14043,15 @@ 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 "------------------------" - 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) clear @@ -14065,8 +14065,8 @@ 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}" - 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 @@ -14086,15 +14086,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 ;; *) @@ -14116,37 +14116,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_info ;; - 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 ;; @@ -14161,13 +14161,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 @@ -14175,70 +14175,70 @@ 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 "内核调优面板 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" -echo "docker環境安裝 k docker install |k docker 安裝" +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 info" +echo "命令收藏夹 k fav | k 命令收藏夹" +echo "应用市场管理 k app" +echo "应用编号快捷管理 k app 26 | k app 1panel | k app npm" +echo "显示系统信息 k info" } 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|更新) @@ -14272,7 +14272,7 @@ else rsync_run) shift - send_stats "定時rsync同步" + send_stats "定时rsync同步" run_task "$@" ;; @@ -14291,7 +14291,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" @@ -14304,13 +14304,13 @@ else swap) shift - send_stats "快速設置虛擬內存" + send_stats "快速设置虚拟内存" add_swap "$@" ;; time|时区) shift - send_stats "快速設置時區" + send_stats "快速设置时区" set_timedate "$@" ;; @@ -14358,42 +14358,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 @@ -14403,7 +14403,7 @@ else shift case $1 in install|安装) - send_stats "快捷安裝docker" + send_stats "快捷安装docker" install_docker ;; ps|容器) @@ -14411,7 +14411,7 @@ else docker_ps ;; img|镜像) - send_stats "快捷鏡像管理" + send_stats "快捷镜像管理" docker_image ;; *) @@ -14438,7 +14438,7 @@ else app) shift - send_stats "應用$@" + send_stats "应用$@" linux_panel "$@" ;; From 9a46638f68012059cd78eb4b5b6b4ffdab61edf8 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 14 Dec 2025 04:44:15 +0000 Subject: [PATCH 11/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=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 | 10 +- jp/kejilion.sh | 1652 ++++++++--------- kr/kejilion.sh | 4732 ++++++++++++++++++++++++------------------------ tw/kejilion.sh | 224 +-- 4 files changed, 3309 insertions(+), 3309 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 14573157f..802aef59b 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -4778,7 +4778,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 @@ -6119,7 +6119,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 @@ -6189,7 +6189,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 @@ -8815,7 +8815,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}------------------------" @@ -14175,7 +14175,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 e14a01833..c5762f104 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}テクノロジー ライオン スクリプト ツールボックスへようこそ${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 @@ -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 "最小需求空间: ${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 @@ -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 @@ -261,14 +261,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" @@ -281,43 +281,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 } @@ -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}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 @@ -502,63 +502,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]) @@ -567,28 +567,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 "------------------------------------------------------------" @@ -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) @@ -622,8 +622,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) @@ -642,44 +642,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]) @@ -688,7 +688,7 @@ while true; do [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "選択が無効です。Y または N を入力してください。" ;; esac ;; @@ -756,16 +756,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}" } @@ -777,27 +777,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 @@ -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 状态 + # 現在の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,117 +872,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がブロックされました" } @@ -992,7 +992,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 @@ -1002,12 +1002,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 @@ -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_code 的 IP 区域文件失败" + echo "エラー: ダウンロード$country_codeIPゾーンファイルが失敗しました" continue fi @@ -1052,7 +1052,7 @@ manage_country_rules() { iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP - echo "已成功阻止 $country_code 的 IP 地址" + echo "正常にブロックされました$country_codeIPアドレス" rm "${country_code,,}.zone" ;; @@ -1062,7 +1062,7 @@ manage_country_rules() { fi if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" + 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_code 的 IP 地址" + echo "正常に許可されました$country_codeIPアドレス" rm "${country_code,,}.zone" ;; @@ -1086,11 +1086,11 @@ manage_country_rules() { ipset destroy "$ipset_name" fi - echo "已成功解除 $country_code 的 IP 地址限制" + echo "正常に削除されました$country_codeIPアドレス制限" ;; *) - echo "用法: manage_country_rules {block|allow|unblock} " + echo "使用法: manage_country_rules {block|allow|unblock} " ;; esac done @@ -1111,42 +1111,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. 指定した国の IP をブロックする 16. 指定した国の IP のみを許可する" + echo "17. 指定国における知的財産制限を解除する" 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 @@ -1159,10 +1159,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 @@ -1175,40 +1175,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 @@ -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_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" ;; *) @@ -1250,23 +1250,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 @@ -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 @@ -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}" @@ -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 @@ -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 @@ -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,15 +1446,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 "" } @@ -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" @@ -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 "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 @@ -1542,7 +1542,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 @@ -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,8 +1616,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}仕上げる" } @@ -1636,11 +1636,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" } @@ -1650,29 +1650,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_FILECF 情報は後で変更できます。" + 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 "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 @@ -1696,28 +1696,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 @@ -1733,23 +1733,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 @@ -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,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" 的行前 + # 「Happy Publishing」を含む行の前に新しい定義を挿入します。 awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /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,11 +1881,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 @@ -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,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 @@ -1983,31 +1983,31 @@ nginx_gzip() { web_security() { - send_stats "LDNMP环境防御" + send_stats "LDNMP環境防御" while true; do check_f2b_status check_waf_status check_cf_mode clear - echo -e "服务器网站防御程序 ${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. 查看网站拦截记录" - echo "7. 查看防御规则列表 8. 查看日志实时监控" + echo "5. SSH 傍受記録の表示 6. Web サイト傍受記録の表示" + echo "7. 防御ルールのリストを表示します。 8. リアルタイム監視のログを表示します。" echo "------------------------" - echo "11. 配置拦截参数 12. 清除所有拉黑的IP" + 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防御" + 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 @@ -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模式" - echo "到cf后台右上角我的个人资料,选择左侧API令牌,获取Global API Key" + send_stats "クラウドフレアモード" + 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 @@ -2107,21 +2107,21 @@ 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}" + 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 -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 @@ -2138,23 +2138,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) @@ -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 @@ -2198,21 +2198,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 @@ -2228,33 +2228,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 @@ -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 @@ -2278,23 +2278,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 @@ -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 @@ -2316,7 +2316,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP环境已设置成 高性能模式" + echo "LDNMP 環境が高パフォーマンス モードに設定されている" ;; 3) @@ -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 # } @@ -2386,7 +2386,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "访问地址:" +echo "訪問先住所:" ip_address @@ -2424,31 +2424,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 @@ -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,34 +2477,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 @@ -2514,7 +2514,7 @@ block_container_port() { fi - echo "已阻止IP+端口访问该服务" + echo "IP+ポートはサービスへのアクセスをブロックされています" save_iptables_rules } @@ -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 @@ -2554,17 +2554,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 +2575,7 @@ clear_container_rules() { fi - echo "已允许IP+端口访问该服务" + echo "IP+ポートによるサービスへのアクセスが許可されました" save_iptables_rules } @@ -2589,25 +2589,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 +2616,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 +2648,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,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. 阻止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) 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,12 +2771,12 @@ while true; do 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 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,19 +2860,19 @@ 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) 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,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" @@ -3063,11 +3063,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 +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 @@ -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,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 @@ -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,16 +3185,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 +3206,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 @@ -3247,17 +3247,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 @@ -3280,14 +3280,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 @@ -3340,12 +3340,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//') @@ -3358,35 +3358,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 @@ -3395,15 +3395,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') @@ -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" {} + @@ -3442,10 +3442,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 @@ -3459,25 +3459,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 @@ -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 "官网介绍: $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 @@ -3541,20 +3541,20 @@ while true; do panel_app_install add_app_id - send_stats "${panelname}安装" + send_stats "${panelname}インストール" ;; 2) panel_app_manage 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 @@ -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,17 +3620,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 @@ -3640,9 +3640,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 @@ -3662,17 +3662,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 を入力してください [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 + 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_name 已成功添加到 frpc.toml" + # 生成された情報を出力する + echo "仕える$service_namefrpc.toml に正常に追加されました" docker restart frpc @@ -3694,12 +3694,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 @@ -3709,7 +3709,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # 打印表头 + # ヘッダーを印刷します printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -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, \ @@ -3739,11 +3739,11 @@ list_forwarding_services() { type } - # 更新当前服务名称 + # 現在のサービス名を更新します if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 清除之前的值 + # 前回の値をクリア local_ip="" local_port="" remote_port="" @@ -3772,7 +3772,7 @@ list_forwarding_services() { } END { - # 打印最后一个服务的信息 + # 最後のサービスに関する情報を出力します 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 @@ -3804,18 +3804,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 @@ -3824,7 +3824,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}" @@ -3851,7 +3851,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRP服务端" + send_stats "FRPサーバー" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3859,25 +3859,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 @@ -3885,7 +3885,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 +3895,7 @@ frps_panel() { donlond_frp frps add_app_id - echo "FRP服务端已经更新完成" + echo "FRPサーバーを更新しました" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3906,37 +3906,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サービスステータスが更新されました" ;; *) @@ -3949,7 +3949,7 @@ frps_panel() { frpc_panel() { - send_stats "FRP客户端" + send_stats "FRPクライアント" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3957,10 +3957,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 @@ -3968,13 +3968,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 @@ -3982,7 +3982,7 @@ frpc_panel() { configure_frpc add_app_id - echo "FRP客户端已经安装完成" + echo "FRPクライアントがインストールされています" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -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,68 +4049,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. 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 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..." - 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 \ @@ -4118,31 +4118,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" ;; *) @@ -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 @@ -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 @@ -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,13 +4243,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 @@ -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 "清理未使用的依赖..." + 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 @@ -4327,26 +4327,26 @@ 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地址" + 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" @@ -4354,7 +4354,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,14 +4362,14 @@ 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 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 设置为 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/' \ @@ -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" @@ -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 @@ -4460,17 +4460,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 @@ -4488,7 +4488,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}" } @@ -4497,26 +4497,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 @@ -4527,41 +4527,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" @@ -4577,21 +4577,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 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 + 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,49 +4599,49 @@ 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 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 @@ -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 @@ -4666,7 +4666,7 @@ dd_xitong() { ;; 23) - send_stats "重装alma10" + send_stats "alma10を再インストールする" dd_xitong_3 bash reinstall.sh almalinux 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 @@ -4714,7 +4714,7 @@ dd_xitong() { ;; 29) - send_stats "重装centos10" + send_stats "centos10を再インストールする" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4722,7 +4722,7 @@ dd_xitong() { ;; 30) - send_stats "重装centos9" + send_stats "centos9を再インストールする" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4730,7 +4730,7 @@ dd_xitong() { ;; 31) - send_stats "重装alpine" + send_stats "アルパインを再インストールする" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4738,7 +4738,7 @@ dd_xitong() { ;; 32) - send_stats "重装arch" + send_stats "アーチを再インストールする" dd_xitong_3 bash reinstall.sh arch reboot @@ -4746,7 +4746,7 @@ dd_xitong() { ;; 33) - send_stats "重装kali" + send_stats "kaliを再インストールする" dd_xitong_3 bash reinstall.sh kali reboot @@ -4754,7 +4754,7 @@ dd_xitong() { ;; 34) - send_stats "重装openeuler" + send_stats "オープニューラーを再インストールする" dd_xitong_3 bash reinstall.sh openeuler 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 "重装windows10" + send_stats "Windows 10を再インストールする" 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 @@ -4802,7 +4802,7 @@ dd_xitong() { ;; 44) - send_stats "重装windows server 25" + send_stats "Windowsサーバー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 "Windowsサーバー22を再インストールします" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" 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 @@ -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 @@ -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 "------------------------" - 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) @@ -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内核开启BBR3" + echo "Debian/Ubuntu のみをサポートします" + 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+') @@ -4949,17 +4949,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 +4968,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 } @@ -5009,37 +5009,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 "------------------------" - 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 "Red Hat カーネルをアンインストールする" server_reboot ;; @@ -5052,26 +5052,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 "続行してもよろしいですか? (はい/いいえ):" 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 @@ -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 \ @@ -5092,19 +5092,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 +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 \ @@ -5122,8 +5122,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}" } @@ -5135,23 +5135,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 @@ -5160,7 +5160,7 @@ clamav() { ;; 2) - send_stats "重要目录扫描" + send_stats "重要なディレクトリのスキャン" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5168,8 +5168,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 +5186,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 +5212,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 @@ -5253,36 +5253,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 @@ -5294,37 +5294,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 } -# 网站搭建优化函数 +# Webサイト構築最適化機能 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 +5336,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 @@ -5356,62 +5356,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 サイト最適化モード: 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 @@ -5438,7 +5438,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 @@ -5447,17 +5447,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 } @@ -5467,29 +5467,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 +5511,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 +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}#" @@ -5535,9 +5535,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 +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 "启用后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 +5615,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) @@ -5786,7 +5786,7 @@ linux_backup() { 3) delete_backup ;; *) break ;; esac - read -e -p "Enter を押して続行します..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -5986,9 +5986,9 @@ list_partitions() { lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# パーティションをマウントする +# パーティションのマウント mount_partition() { - send_stats "パーティションをマウントする" + send_stats "パーティションのマウント" read -e -p "マウントするパーティションの名前を入力してください (例: sda1):" PARTITION # パーティションが存在するかどうかを確認する @@ -6138,7 +6138,7 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "Enter を押して続行します..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -6425,7 +6425,7 @@ rsync_manager() { 0) break ;; *) echo "選択が無効です。もう一度お試しください。" ;; esac - read -e -p "Enter を押して続行します..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -8028,7 +8028,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" ;; @@ -8815,7 +8815,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}------------------------" @@ -9082,7 +9082,7 @@ while true; do fi echo "" echo "------------------------" - echo "1. 使用する" + echo "1. 使用方法" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -12188,7 +12188,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}------------------------" @@ -12865,7 +12865,7 @@ EOF echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9.タイ・バンコク時間" + echo "9. タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -14175,7 +14175,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 d95435dd8..a3dc2d606 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}기술 사자 스크립트 도구 상자에 오신 것을 환영합니다${gl_bai}" + echo "스크립트를 처음 사용하는 경우 사용자 라이센스 계약을 읽고 동의하십시오." + 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 - 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 @@ -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 "最小需求空间: ${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 @@ -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 @@ -261,14 +261,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" @@ -281,43 +281,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 } @@ -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 @@ -502,63 +502,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]) @@ -567,28 +567,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 "------------------------------------------------------------" @@ -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) @@ -622,8 +622,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) @@ -642,44 +642,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]) @@ -688,7 +688,7 @@ while true; do [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac ;; @@ -756,16 +756,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}" } @@ -777,27 +777,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 @@ -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 状态 + # 현재 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,117 +872,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가 차단됨" } @@ -992,7 +992,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 @@ -1002,12 +1002,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 @@ -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规则的函数 +# 국가 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_code 的 IP 区域文件失败" + echo "오류: 다운로드$country_codeIP 영역 파일 실패" continue fi @@ -1052,7 +1052,7 @@ manage_country_rules() { iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP - echo "已成功阻止 $country_code 的 IP 地址" + echo "성공적으로 차단되었습니다$country_codeIP 주소" rm "${country_code,,}.zone" ;; @@ -1062,7 +1062,7 @@ manage_country_rules() { fi if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" + 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_code 的 IP 地址" + echo "허용되었습니다.$country_codeIP 주소" rm "${country_code,,}.zone" ;; @@ -1086,11 +1086,11 @@ manage_country_rules() { ipset destroy "$ipset_name" fi - echo "已成功解除 $country_code 的 IP 地址限制" + echo "성공적으로 제거되었습니다$country_codeIP 주소 제한" ;; *) - echo "用法: manage_country_rules {block|allow|unblock} " + echo "사용법: prepare_country_rules {block|allow|unblock} " ;; esac done @@ -1111,42 +1111,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. 특정 국가 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 @@ -1159,10 +1159,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 @@ -1175,40 +1175,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 @@ -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_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" ;; *) @@ -1250,23 +1250,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 + # 이전 /swap 파일 삭제 rm -f /swapfile - # 创建新的 swap 分区 + # 새로운 스왑 파티션 생성 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 @@ -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}" @@ -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 @@ -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 @@ -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,15 +1446,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 "" } @@ -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" @@ -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 "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 @@ -1542,7 +1542,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 @@ -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,8 +1616,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}마치다" } @@ -1636,11 +1636,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" } @@ -1650,29 +1650,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의 캐시를 지워야 합니까? (예/아니요):" 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 "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 @@ -1696,28 +1696,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 @@ -1733,23 +1733,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 @@ -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/ { @@ -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/ { @@ -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,11 +1881,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 @@ -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,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 @@ -1983,31 +1983,31 @@ nginx_gzip() { web_security() { - send_stats "LDNMP环境防御" + send_stats "LDNMP 환경 방어" while true; do check_f2b_status 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 "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 @@ -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模式" - echo "到cf后台右上角我的个人资料,选择左侧API令牌,获取Global API Key" + send_stats "클라우드플레어 모드" + 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 @@ -2107,21 +2107,21 @@ 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}" + 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 @@ -2138,23 +2138,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) @@ -2179,10 +2179,10 @@ 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 ';') -# 根据值设置模式信息 +# 값에 따라 모드 정보 설정 if [ "$current_value" = "8" ]; then mode_info=" 高性能模式" else @@ -2198,21 +2198,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 @@ -2228,33 +2228,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 @@ -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 @@ -2278,23 +2278,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 @@ -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 @@ -2316,7 +2316,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP环境已设置成 高性能模式" + echo "LDNMP 환경이 고성능 모드로 설정되었습니다." ;; 3) @@ -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 # } @@ -2386,7 +2386,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "访问地址:" +echo "방문 주소:" ip_address @@ -2424,31 +2424,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 +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,34 +2477,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 @@ -2514,7 +2514,7 @@ block_container_port() { fi - echo "已阻止IP+端口访问该服务" + echo "IP+포트가 서비스 접근을 차단했습니다." save_iptables_rules } @@ -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 @@ -2554,17 +2554,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 +2575,7 @@ clear_container_rules() { fi - echo "已允许IP+端口访问该服务" + echo "IP+포트로 서비스 접속이 허용되었습니다" save_iptables_rules } @@ -2589,25 +2589,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 +2616,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 +2648,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,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. 阻止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) 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,12 +2771,12 @@ while true; do 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 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 "https://가 없는 도메인 이름 형식 example.com" 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,19 +2860,19 @@ 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) 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,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 "https://가 없는 도메인 이름 형식 example.com" 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" @@ -3063,11 +3063,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 +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 @@ -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,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 @@ -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,16 +3185,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 +3206,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 @@ -3247,17 +3247,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 @@ -3280,14 +3280,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 @@ -3340,12 +3340,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//') @@ -3358,35 +3358,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 @@ -3395,15 +3395,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') @@ -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 "创建关联站点" - 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 @@ -3459,25 +3459,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 @@ -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 ;; @@ -3518,21 +3518,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 @@ -3541,20 +3541,20 @@ while true; do panel_app_install add_app_id - send_stats "${panelname}安装" + send_stats "${panelname}설치하다" ;; 2) panel_app_manage 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 @@ -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,17 +3620,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 @@ -3640,9 +3640,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 @@ -3662,17 +3662,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를 입력하십시오. [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 + 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_name 已成功添加到 frpc.toml" + # 생성된 정보를 출력 + echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." docker restart frpc @@ -3694,12 +3694,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 @@ -3709,7 +3709,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # 打印表头 + # 헤더 인쇄 printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -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, \ @@ -3739,11 +3739,11 @@ list_forwarding_services() { type } - # 更新当前服务名称 + # 현재 서비스 이름 업데이트 if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 清除之前的值 + # 이전 값 지우기 local_ip="" local_port="" remote_port="" @@ -3772,7 +3772,7 @@ list_forwarding_services() { } END { - # 打印最后一个服务的信息 + # 마지막 서비스에 대한 정보 인쇄 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 @@ -3804,18 +3804,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 @@ -3824,7 +3824,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}" @@ -3851,7 +3851,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRP服务端" + send_stats "FRP 서버" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3859,25 +3859,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 @@ -3885,7 +3885,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 +3895,7 @@ frps_panel() { donlond_frp frps add_app_id - echo "FRP服务端已经更新完成" + echo "FRP 서버가 업데이트되었습니다" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3906,37 +3906,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 "https://가 없는 도메인 이름 형식 example.com" 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 서비스 상태가 새로 고쳐졌습니다." ;; *) @@ -3949,7 +3949,7 @@ frps_panel() { frpc_panel() { - send_stats "FRP客户端" + send_stats "FRP 클라이언트" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3957,10 +3957,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 @@ -3968,13 +3968,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 @@ -3982,7 +3982,7 @@ frpc_panel() { configure_frpc add_app_id - echo "FRP客户端已经安装完成" + echo "FRP 클라이언트가 설치되었습니다" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -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,68 +4049,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 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..." - 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 \ @@ -4118,31 +4118,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" ;; *) @@ -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 @@ -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 @@ -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,13 +4243,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 @@ -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 "清理未使用的依赖..." + 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 @@ -4327,26 +4327,26 @@ 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地址" + 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" @@ -4354,7 +4354,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,14 +4362,14 @@ 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 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 设置为 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/' \ @@ -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" @@ -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 @@ -4460,17 +4460,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 @@ -4488,7 +4488,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}" } @@ -4497,26 +4497,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}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}이 기능을 실행하려면 루트 사용자가 필요합니다!" && 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 @@ -4527,41 +4527,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" @@ -4577,21 +4577,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 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 + 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 @@ -4599,49 +4599,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 "우분투 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 @@ -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 @@ -4666,7 +4666,7 @@ dd_xitong() { ;; 23) - send_stats "重装alma10" + send_stats "alma10 재설치" dd_xitong_3 bash reinstall.sh almalinux 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 @@ -4714,7 +4714,7 @@ dd_xitong() { ;; 29) - send_stats "重装centos10" + send_stats "centos10 재설치" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4722,7 +4722,7 @@ dd_xitong() { ;; 30) - send_stats "重装centos9" + send_stats "centos9 재설치" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4730,7 +4730,7 @@ dd_xitong() { ;; 31) - send_stats "重装alpine" + send_stats "알파인 재설치" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4738,7 +4738,7 @@ dd_xitong() { ;; 32) - send_stats "重装arch" + send_stats "아치 재설치" dd_xitong_3 bash reinstall.sh arch reboot @@ -4746,7 +4746,7 @@ dd_xitong() { ;; 33) - send_stats "重装kali" + send_stats "칼리 재설치" dd_xitong_3 bash reinstall.sh kali reboot @@ -4754,7 +4754,7 @@ dd_xitong() { ;; 34) - send_stats "重装openeuler" + send_stats "openeuler 다시 설치" dd_xitong_3 bash reinstall.sh openeuler reboot @@ -4762,7 +4762,7 @@ dd_xitong() { ;; 35) - send_stats "重装opensuse" + send_stats "Openuse 다시 설치" 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 "윈도우 11 재설치" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -4787,14 +4787,14 @@ dd_xitong() { 42) dd_xitong_2 - send_stats "重装windows10" + send_stats "윈도우 10 재설치" 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 @@ -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 @@ -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 @@ -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 "------------------------" - 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) @@ -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内核开启BBR3" + echo "데비안/우분투만 지원" + 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+') @@ -4949,17 +4949,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 +4968,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 } @@ -5009,37 +5009,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 "------------------------" - 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 "Red Hat 커널 제거" server_reboot ;; @@ -5052,26 +5052,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 "계속하시겠습니까? (예/아니요):" 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 @@ -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 \ @@ -5092,19 +5092,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 +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 run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5122,8 +5122,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}" } @@ -5135,23 +5135,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 @@ -5160,7 +5160,7 @@ clamav() { ;; 2) - send_stats "重要目录扫描" + send_stats "중요한 디렉토리 스캔" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5168,8 +5168,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 +5186,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 +5212,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 @@ -5253,36 +5253,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 @@ -5294,37 +5294,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 @@ -5336,16 +5336,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 @@ -5356,62 +5356,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 @@ -5438,7 +5438,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 @@ -5447,17 +5447,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 } @@ -5467,29 +5467,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 +5511,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 +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}#" @@ -5535,9 +5535,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 +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 "启用后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 +5615,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 +5623,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 "휴지통을 비우시겠습니까? [예/아니요]:" confirm if [[ "$confirm" == "y" ]]; then trash-empty - echo "回收站已清空。" + echo "휴지통이 비워졌습니다." fi ;; *) @@ -5650,23 +5650,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 "- Enter를 눌러 기본 디렉터리(/etc/usr/home)를 사용합니다." + read -r -p "백업할 디렉터리를 입력하십시오(여러 디렉터리를 공백으로 구분하고 Enter를 눌러 기본 디렉터리를 사용하십시오)." input - # 如果用户没有输入目录,则使用默认目录 + # 사용자가 디렉터리를 입력하지 않으면 기본 디렉터리가 사용됩니다. if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5674,119 +5674,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 } @@ -5798,56 +5798,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를 두 번 누르세요)." 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,89 +5856,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 @@ -5950,21 +5950,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 } @@ -5980,156 +5980,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? (예/아니요):" 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 ;; @@ -6138,64 +6138,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 "- 원격 디렉터리: /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 "원격 user@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를 두 번 누르세요)." 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" @@ -6203,63 +6203,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 @@ -6270,51 +6270,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 @@ -6322,32 +6322,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="" @@ -6355,66 +6355,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 ;; @@ -6423,9 +6423,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "无效的选择,请重试。" ;; + *) echo "선택이 잘못되었습니다. 다시 시도해 주세요." ;; esac - read -e -p "按回车键继续..." + read -e -p "계속하려면 Enter를 누르세요..." done } @@ -6440,7 +6440,7 @@ rsync_manager() { linux_info() { clear - send_stats "系统信息查询" + send_stats "시스템 정보 쿼리" ip_address @@ -6490,41 +6490,41 @@ 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" - 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 @@ -6537,111 +6537,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 통신 연결 도구" + 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}레인저 파일 관리 도구" + 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) @@ -6649,7 +6649,7 @@ linux_tools() { install btop clear btop - send_stats "安装btop" + send_stats "btop 설치" ;; 12) clear @@ -6658,7 +6658,7 @@ linux_tools() { clear ranger cd ~ - send_stats "安装ranger" + send_stats "레인저 설치" ;; 13) clear @@ -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 @@ -6694,7 +6694,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "安装nano" + send_stats "나노 설치" ;; @@ -6705,7 +6705,7 @@ linux_tools() { clear git --help cd ~ - send_stats "安装git" + send_stats "자식 설치" ;; 21) @@ -6713,67 +6713,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 "닌베이더 설치" ;; 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 컬 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) @@ -6781,7 +6781,7 @@ linux_tools() { ;; *) - echo "无效的输入!" + echo "입력이 잘못되었습니다!" ;; esac break_end @@ -6795,27 +6795,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 @@ -6857,21 +6857,21 @@ docker_ssh_migration() { list_backups() { local BACKUP_ROOT="/tmp" - 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 -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,28 +6892,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도커 작성 컨테이너입니다${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 项目已经打包过,跳过 + # Compose 프로젝트가 이미 패키징된 경우 건너뛰세요. if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}Compose 项目 [$project_name] 已备份过,跳过重复打包...${NC}" + echo -e "${YELLOW}프로젝트 작성 [$project_name] 이미 백업되어 있으니 반복 패키징은 생략하세요...${NC}" continue fi @@ -6921,137 +6921,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 복원:$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 -e -p "请输入要还原的备份目录: " BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + send_stats "도커 복원" + 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 项目 --------- + # --------- 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 项目的容器是否已经在运行 + # 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 -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" - 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 @@ -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 @@ -7095,68 +7095,68 @@ docker_ssh_migration() { # ---------------------------- - # 迁移 + # 이주하다 # ---------------------------- migrate_docker() { - send_stats "Docker迁移" + send_stats "도커 마이그레이션" 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 - 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" - 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; } + 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}" } # ---------------------------- - # 主菜单 + # 메인 메뉴 # ---------------------------- 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. 도커 프로젝트 백업" + echo -e "2. 도커 프로젝트 마이그레이션" + 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 ;; 3) restore_docker ;; 4) delete_backup ;; 0) return ;; - *) echo -e "${RED}无效选项${NC}" ;; + *) echo -e "${RED}잘못된 옵션${NC}" ;; esac break_end done @@ -7173,38 +7173,38 @@ linux_docker() { while true; do clear - # send_stats "docker管理" - echo -e "Docker管理" + # 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全局状态 ${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}도커 컨테이너 관리${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 "도커 환경 설치" install_add_docker ;; @@ -7215,22 +7215,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 "Docker 볼륨:${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 "" @@ -7245,8 +7245,8 @@ linux_docker() { 5) while true; do clear - send_stats "Docker网络管理" - echo "Docker网络列表" + send_stats "도커 네트워크 관리" + echo "도커 네트워크 목록" echo "------------------------------------------------------------" docker network ls echo "" @@ -7270,36 +7270,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 @@ -7308,8 +7308,8 @@ linux_docker() { ;; 4) - send_stats "删除网络" - read -e -p "请输入要删除的网络名: " dockernetwork + send_stats "네트워크 삭제" + read -e -p "삭제할 네트워크 이름을 입력하세요:" dockernetwork docker network rm $dockernetwork ;; @@ -7323,29 +7323,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 @@ -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]) @@ -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 "도커 정리" read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7385,13 +7385,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) ;; @@ -7407,13 +7407,13 @@ linux_docker() { 11) clear - send_stats "Docker v6 开" + send_stats "도커 v6 켜짐" docker_ipv6_on ;; 12) clear - send_stats "Docker v6 关" + send_stats "도커 v6 닫기" docker_ipv6_off ;; @@ -7424,7 +7424,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]) @@ -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,151 +7462,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}예우 스트리밍 미디어 잠금 해제 감지" + 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 삼중 네트워크 백홀 회선 테스트" + 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 세 개의 네트워크 라인 테스트" + 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}벤치 성능 테스트" + 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 "예우 스트리밍 미디어 잠금 해제 감지" 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 "초고속 트리플 네트워크 속도 테스트" 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 "벤치 성능 테스트" 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 @@ -7632,51 +7632,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}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 "설치하시겠습니까? (예/아니요):" 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 "请输入Speedtest间隔时间(秒) [默认: $DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval + read -e -p "속도 테스트 간격 시간(초)을 입력하십시오. [기본값:$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" \ @@ -7684,14 +7684,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 ;; @@ -7699,20 +7699,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 "계속하시겠습니까? (예/아니요):" 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) @@ -7724,28 +7724,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 - 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) @@ -7756,15 +7756,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 +7785,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 +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}安装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}워드프레스 설치${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 포럼 웹사이트 설치${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 +7872,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 +7898,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 +7934,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 "레디스 호스트: 레디스" ;; 5) clear - # 苹果CMS + # AppleCMS webname="苹果CMS" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포 시작$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7973,24 +7973,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 +8011,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 "레디스 주소 : 레디스" + echo "redis 비밀번호: 기본적으로 입력되지 않음" + echo "레디스 포트: 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论坛 + # 플라럼 포럼 webname="flarum论坛" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포 시작$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8075,12 +8075,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 +8088,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 +8113,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 +8126,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 +8152,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 +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 "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "현재는 zip 형식의 소스 코드 패키지만 업로드할 수 있습니다. 소스 코드 패키지를 /home/web/html/에 넣어주세요.${yuming}디렉토리 아래" + read -e -p "다운로드 링크를 입력하여 소스 코드 패키지를 원격으로 다운로드할 수도 있습니다. 원격 다운로드를 건너뛰려면 Enter를 직접 누르세요." url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8193,20 +8193,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 @@ -8217,15 +8217,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 +8235,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로 끝나는 압축 패키지여야 합니다. Pagoda/1panel 백업 데이터 가져오기를 지원하려면 /home/ 디렉토리에 넣으십시오." + read -e -p "다운로드 링크를 입력하여 원격으로 백업 데이터를 다운로드할 수도 있습니다. 원격 다운로드를 건너뛰려면 Enter를 직접 누르세요." url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -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 @@ -8278,12 +8278,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 +8296,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 +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" @@ -8332,11 +8332,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 +8356,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 +8379,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 +8397,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 +8431,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 +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 "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "현재는 zip 형식의 소스 코드 패키지만 업로드할 수 있습니다. 소스 코드 패키지를 /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 "请输入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 @@ -8492,23 +8492,23 @@ 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 "백업 데이터를 원격 서버로 전송하시겠습니까? (예/아니요):" 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 /home/*.tar.gz | head -1) @@ -8516,9 +8516,9 @@ 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 "文件已传送至远程服务器home目录。" + echo "파일이 원격 서버 홈 디렉터리로 전송되었습니다." else - echo "未找到要传送的文件。" + echo "전송할 파일을 찾을 수 없습니다." fi break ;; @@ -8526,7 +8526,7 @@ linux_ldnmp() { break ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac done @@ -8534,9 +8534,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 @@ -8546,18 +8546,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 ;; *) @@ -8571,19 +8571,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 "최신 백업을 복원하려면 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 @@ -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 ;; @@ -8620,11 +8620,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,13 +8644,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 @@ -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/ @@ -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" - 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)(최신 버전을 얻으려면 Enter 키를 누르세요):" version local version=${version:-8.3} cd /home/web/ cp /home/web/docker-compose.yml /home/web/docker-compose1.yml @@ -8709,8 +8709,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 +8721,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 @@ -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]) @@ -8769,7 +8769,7 @@ linux_ldnmp() { ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac ;; @@ -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..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8813,71 +8813,71 @@ 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 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}禅道项目管理软件 ${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}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}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}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 패널 탐색 패널${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}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}도커 가속 스테이션${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}라마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}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}비트워든 비밀번호 관리자${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}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}코마리 서버 모니터링 도구${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}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}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}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 @@ -9030,8 +9030,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,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "搭建哪吒" + send_stats "네자 빌드" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,20 +9073,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 "네자 모니터링$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 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) @@ -9143,7 +9143,7 @@ while true; do ;; 9|mail) - send_stats "搭建邮局" + send_stats "우체국을 짓다" clear install telnet local app_id="9" @@ -9153,44 +9153,44 @@ 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}}' 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 + 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" @@ -9200,7 +9200,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "按任意键继续..." + echo "계속하려면 아무 키나 누르세요..." read -n 1 -s -r -p "" install jq @@ -9219,9 +9219,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 "" @@ -9244,9 +9244,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 "" ;; @@ -9257,7 +9257,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "앱이 제거되었습니다." ;; *) @@ -9291,7 +9291,7 @@ while true; do clear ip_address - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -9301,7 +9301,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 } @@ -9311,7 +9311,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "应用已卸载" + echo "앱이 제거되었습니다." } docker_app_plus @@ -9395,7 +9395,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -9409,7 +9409,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 @@ -9554,7 +9554,7 @@ while true; do ;; 19|safeline) - send_stats "搭建雷池" + send_stats "천둥 웅덩이를 만들어라" local app_id="19" local docker_name=safeline-mgt @@ -9562,20 +9562,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 "레이치(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 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) @@ -9585,7 +9585,7 @@ while true; do add_app_id clear - echo "雷池WAF面板已经安装完成" + echo "Leichi WAF 패널이 설치되었습니다." check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9598,7 +9598,7 @@ while true; do add_app_id clear - echo "雷池WAF面板已经更新完成" + echo "Leichi WAF 패널이 업데이트되었습니다." check_docker_app_ip ;; 3) @@ -9609,7 +9609,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" ;; *) @@ -9728,8 +9728,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 \ @@ -10017,7 +10017,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" @@ -10070,7 +10070,7 @@ while true; do ;; 38|xiaoya) - send_stats "小雅全家桶" + send_stats "Xiaoya 가족 버킷" clear install_docker check_disk_space 1 @@ -10274,9 +10274,9 @@ while true; do prometheus_install clear ip_address - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip - echo "初始用户名密码均为: admin" + echo "초기 사용자 이름과 비밀번호는 admin입니다." } docker_app_update() { @@ -10294,7 +10294,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "应用已卸载" + echo "앱이 제거되었습니다." } docker_app_plus @@ -10381,7 +10381,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 ;; @@ -10501,7 +10501,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -10516,7 +10516,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 @@ -10544,7 +10544,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -10559,7 +10559,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -10567,7 +10567,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 @@ -10588,17 +10588,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 "앱이 업데이트되었습니다" } @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "应用已卸载" + echo "앱이 제거되었습니다." } docker_app_plus @@ -10655,7 +10655,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 } @@ -10671,7 +10671,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 @@ -10933,7 +10933,7 @@ while true; do docker_rum() { - read -e -p "设置LibreTV的登录密码: " app_passwd + read -e -p "LibreTV 로그인 비밀번호 설정:" app_passwd docker run -d \ --name libretv \ @@ -10967,9 +10967,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 @@ -10985,7 +10985,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -10999,7 +10999,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 @@ -11072,8 +11072,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 \ @@ -11170,11 +11170,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) @@ -11183,17 +11183,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 } @@ -11203,7 +11203,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11288,7 +11288,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 \ @@ -11392,7 +11392,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -11405,7 +11405,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 @@ -11566,7 +11566,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 @@ -11618,7 +11618,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -11632,7 +11632,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 @@ -11707,8 +11707,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} \ @@ -11756,7 +11756,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -11770,7 +11770,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 @@ -11810,7 +11810,7 @@ while true; do block_container_port "$docker_name" "$ipv4_address" clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -11824,7 +11824,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 @@ -11842,9 +11842,9 @@ 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 + read -e -p "WireGuard 네트워크 세그먼트(기본값 10.13.13.0)를 입력하세요." NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11914,18 +11914,18 @@ while true; do sleep 2 echo - echo -e "${gl_huang}所有客户端二维码配置: ${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的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을 다운로드하고 위의 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 } @@ -11953,16 +11953,16 @@ while true; do local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" - # 创建目录(如果不存在) + # 디렉터리가 없으면 생성 mkdir -p "$(dirname "$CONFIG_FILE")" - echo "请粘贴你的客户端配置,连续按两次回车保存:" + echo "클라이언트 구성을 붙여넣고 Enter를 두 번 눌러 저장하세요." - # 初始化变量 + # 변수 초기화 input="" empty_line_count=0 - # 逐行读取用户输入 + # 사용자 입력을 한 줄씩 읽습니다. while IFS= read -r line; do if [[ -z "$line" ]]; then ((empty_line_count++)) @@ -11975,10 +11975,10 @@ while true; do fi done - # 写入配置文件 + # 구성 파일 쓰기 echo "$input" > "$CONFIG_FILE" - echo "客户端配置已保存到 $CONFIG_FILE" + echo "클라이언트 구성이 다음에 저장되었습니다.$CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12023,10 +12023,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 @@ -12043,7 +12043,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -12057,7 +12057,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 @@ -12097,24 +12097,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" - read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice + echo "생성된 백업 파일: /$backup_filename" + read -e -p "백업 데이터를 원격 서버로 전송하시겠습니까? (예/아니요):" 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) @@ -12122,14 +12122,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项目,不包含宝塔,1panel等建站面板的数据备份。" + echo "참고: 현재 백업에는 docker 프로젝트만 포함되며, Pagoda, 1panel 등 웹사이트 구축 패널의 데이터 백업은 포함되지 않습니다." break ;; esac @@ -12139,29 +12139,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 "최신 백업을 복원하려면 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 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 ;; @@ -12184,35 +12184,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 @@ -12220,7 +12220,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업공간 시작$SESSION_NAME" tmux_run ;; @@ -12228,63 +12228,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 ;; @@ -12296,21 +12296,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 ;; @@ -12326,29 +12326,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 "다음과 같이 백그라운드에서 실행하려는 명령을 입력하십시오. 컬 -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 @@ -12373,54 +12373,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}기본 호스트 확인${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}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 @@ -12428,34 +12428,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 "현재 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 @@ -12488,7 +12488,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 @@ -12517,55 +12517,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 @@ -12584,8 +12584,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 @@ -12600,51 +12600,51 @@ 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 "------------------------" 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 "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 优先" + 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修复" + echo "이 기능은 jhb에서 제공합니다. 감사합니다!" + send_stats "IPv6 수리" ;; *) @@ -12662,43 +12662,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 "사용자 정의 가상 메모리 세트" ;; *) @@ -12711,8 +12711,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 @@ -12723,62 +12723,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" ;; @@ -12791,50 +12791,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 "" @@ -12842,46 +12842,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. 미국 서부 시간 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 @@ -12924,21 +12924,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 @@ -12956,11 +12956,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 @@ -12968,32 +12968,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 @@ -13001,62 +13001,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 # 跳出循环,退出菜单 @@ -13068,32 +13068,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 # 跳出循环,退出菜单 @@ -13104,24 +13104,24 @@ EOF 22) root_use - send_stats "ssh防御" + 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 -e "SSH 방어 프로그램$check_f2b_status" + echo "fall2ban은 무차별 대입 크래킹을 방지하는 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) f2b_install_sshd @@ -13143,7 +13143,7 @@ EOF 9) remove fail2ban rm -rf /etc/fail2ban - echo "Fail2Ban防御程序已卸载" + echo "Fail2Ban 방어 프로그램이 제거되었습니다." break ;; *) @@ -13156,47 +13156,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 ~ @@ -13209,15 +13209,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 @@ -13230,40 +13230,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 @@ -13279,18 +13279,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 로봇 API 및 사용자 ID를 구성해야 합니다." + 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 @@ -13312,7 +13312,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 @@ -13323,21 +13323,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 @@ -13381,7 +13381,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; } @@ -13404,62 +13404,62 @@ EOF 41) clear - send_stats "留言板" - echo "访问科技lion官方留言板,您对脚本有任何想法欢迎留言交流!" + send_stats "메시지 보드" + echo "Technology Lion 공식 게시판을 방문해 보세요. 스크립트에 대한 아이디어가 있으시면 교환 메시지를 남겨주세요!" echo "https://board.kejilion.pro" - echo "公共密码: kejilion.sh" + echo "공개 비밀번호: kejilion.sh" ;; 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 "원클릭 유지 관리를 원하시나요? (예/아니요):" 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) @@ -13476,25 +13476,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 @@ -13502,7 +13502,7 @@ EOF 99) clear - send_stats "重启系统" + send_stats "시스템을 다시 시작하세요" server_reboot ;; 100) @@ -13518,32 +13518,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 @@ -13559,11 +13559,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 "계속하시겠습니까? (예/아니요):" choice case "$choice" in [Yy]) @@ -13571,16 +13571,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 ;; @@ -13590,7 +13590,7 @@ EOF ;; *) - echo "无效的输入!" + echo "입력이 잘못되었습니다!" ;; esac break_end @@ -13608,187 +13608,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. 파일 디렉터리 압축 풀기 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 @@ -14086,15 +14086,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 ;; *) @@ -14116,41 +14116,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}Eudemons Parlu 서버 오픈 스크립트" 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_info ;; - 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 ;; @@ -14161,13 +14161,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "幻兽帕鲁开服脚本" ; 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 @@ -14175,70 +14175,70 @@ 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" -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 "显示系统信息 k info" +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 제거 nano wget | k 델 나노 wget | k 나노 wget 제거 | k 나노 wget 제거" +echo "시스템 k 업데이트 업데이트 | 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 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 "도커 관리 플레인 k 도커" +echo "docker 환경 설치 k docker 설치 |k docker 설치" +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 "역방향 프록시 설치 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 즐겨찾기 | k 명령 즐겨찾기" +echo "애플리케이션 시장 관리 k app" +echo "신청번호의 빠른 관리 k app 26 | k 앱 1패널 | k 앱 npm" +echo "시스템 정보 표시 k 정보" } 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|更新) @@ -14272,7 +14272,7 @@ else rsync_run) shift - send_stats "定时rsync同步" + send_stats "예약된 rsync 동기화" run_task "$@" ;; @@ -14291,7 +14291,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" @@ -14304,13 +14304,13 @@ else swap) shift - send_stats "快速设置虚拟内存" + send_stats "가상 메모리를 빠르게 설정하세요" add_swap "$@" ;; time|时区) shift - send_stats "快速设置时区" + send_stats "시간대를 빠르게 설정" set_timedate "$@" ;; @@ -14358,42 +14358,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 @@ -14403,15 +14403,15 @@ else shift case $1 in install|安装) - send_stats "快捷安装docker" + send_stats "도커를 빠르게 설치하세요" install_docker ;; ps|容器) - send_stats "快捷容器管理" + send_stats "빠른 컨테이너 관리" docker_ps ;; img|镜像) - send_stats "快捷镜像管理" + send_stats "빠른 이미지 관리" docker_image ;; *) @@ -14438,7 +14438,7 @@ else app) shift - send_stats "应用$@" + send_stats "신청$@" linux_panel "$@" ;; diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 04cbe6ac4..05b2db1f1 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -13981,32 +13981,32 @@ 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 "------------------------" -echo -e "${gl_huang}搬瓦工 49刀每季 美国CN2GIA 日本软银 2核心 1G内存 20G硬盘 1T流量每月${gl_bai}" -echo -e "${gl_bai}网址: https://bandwagonhost.com/aff.php?aff=69004&pid=87${gl_bai}" +echo -e "${gl_huang}搬瓦工 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刀每季 美国CN2GIA 1核心 2G内存 20G硬盘 800G流量每月${gl_bai}" -echo -e "${gl_bai}网址: https://www.dmit.io/aff.php?aff=4966&pid=100${gl_bai}" +echo -e "${gl_lan}DMIT 28刀每季 美國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刀每月 东京软银 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 -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&?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 -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 "科技lion周边" +echo -e "科技lion周邊" 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 "" } @@ -14017,24 +14017,24 @@ echo "" kejilion_update() { -send_stats "脚本更新" +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}" - send_stats "脚本已经最新了,无需更新" + echo -e "${gl_lv}你已經是最新版本!${gl_huang}v$sh_v${gl_bai}" + send_stats "腳本已經最新了,無需更新" else - echo "发现新版本!" - echo -e "当前版本 v$sh_v 最新版本 ${gl_huang}v$sh_v_new${gl_bai}" + echo "發現新版本!" + echo -e "當前版本 v$sh_v最新版本${gl_huang}v$sh_v_new${gl_bai}" fi @@ -14043,15 +14043,15 @@ 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 "------------------------" - 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) clear @@ -14065,8 +14065,8 @@ 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}" - 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 @@ -14086,15 +14086,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 ;; *) @@ -14116,37 +14116,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_info ;; - 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 ;; @@ -14161,13 +14161,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 @@ -14175,70 +14175,70 @@ 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 "內核調優面板 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" -echo "docker环境安装 k docker install |k docker 安装" +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 info" +echo "命令收藏夾 k fav | k 命令收藏夾" +echo "應用市場管理 k app" +echo "應用編號快捷管理 k app 26 | k app 1panel | k app npm" +echo "顯示系統信息 k info" } 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|更新) @@ -14272,7 +14272,7 @@ else rsync_run) shift - send_stats "定时rsync同步" + send_stats "定時rsync同步" run_task "$@" ;; @@ -14291,7 +14291,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" @@ -14304,13 +14304,13 @@ else swap) shift - send_stats "快速设置虚拟内存" + send_stats "快速設置虛擬內存" add_swap "$@" ;; time|时区) shift - send_stats "快速设置时区" + send_stats "快速設置時區" set_timedate "$@" ;; @@ -14358,42 +14358,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 @@ -14403,7 +14403,7 @@ else shift case $1 in install|安装) - send_stats "快捷安装docker" + send_stats "快捷安裝docker" install_docker ;; ps|容器) @@ -14411,7 +14411,7 @@ else docker_ps ;; img|镜像) - send_stats "快捷镜像管理" + send_stats "快捷鏡像管理" docker_image ;; *) @@ -14438,7 +14438,7 @@ else app) shift - send_stats "应用$@" + send_stats "應用$@" linux_panel "$@" ;; From fa7caf6a89728d652e0848f5feff32b8c004ac7e Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 21 Dec 2025 04:06:18 +0000 Subject: [PATCH 12/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202025-12-21=2004:06:18?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 22 +- jp/kejilion.sh | 4718 ++++++++++++++++++++++++------------------------ kr/kejilion.sh | 2520 +++++++++++++------------- 3 files changed, 3630 insertions(+), 3630 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 802aef59b..eae55fc90 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -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 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 @@ -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 setup is complete!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is completed!${gl_bai}" } @@ -4778,7 +4778,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 @@ -6119,7 +6119,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 @@ -6951,7 +6951,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") @@ -8815,7 +8815,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}------------------------" @@ -9153,7 +9153,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" @@ -12198,7 +12198,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" @@ -12636,8 +12636,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) @@ -13990,7 +13990,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 c5762f104..d95435dd8 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}テクノロジー ライオン スクリプト ツールボックスへようこそ${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 @@ -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 "最低限必要なスペース:${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 @@ -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 @@ -261,14 +261,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" @@ -281,43 +281,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 } @@ -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}正在安装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 @@ -502,63 +502,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]) @@ -567,28 +567,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 "------------------------------------------------------------" @@ -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) @@ -622,8 +622,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) @@ -642,44 +642,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]) @@ -688,7 +688,7 @@ while true; do [Nn]) ;; *) - echo "選択が無効です。Y または N を入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -756,16 +756,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}" } @@ -777,27 +777,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 @@ -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ステータスを確認する + # 检查当前的 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,117 +872,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" } @@ -992,7 +992,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 @@ -1002,12 +1002,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 @@ -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_code 的 IP 区域文件失败" continue fi @@ -1052,7 +1052,7 @@ manage_country_rules() { iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP - echo "正常にブロックされました$country_codeIPアドレス" + echo "已成功阻止 $country_code 的 IP 地址" rm "${country_code,,}.zone" ;; @@ -1062,7 +1062,7 @@ manage_country_rules() { fi if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "エラー: ダウンロード$country_codeIPゾーンファイルが失敗しました" + echo "错误:下载 $country_code 的 IP 区域文件失败" 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_code 的 IP 地址" rm "${country_code,,}.zone" ;; @@ -1086,11 +1086,11 @@ manage_country_rules() { ipset destroy "$ipset_name" fi - echo "正常に削除されました$country_codeIPアドレス制限" + echo "已成功解除 $country_code 的 IP 地址限制" ;; *) - echo "使用法: manage_country_rules {block|allow|unblock} " + echo "用法: manage_country_rules {block|allow|unblock} " ;; esac done @@ -1111,42 +1111,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. 指定国における知的財産制限を解除する" + 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 @@ -1159,10 +1159,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 @@ -1175,40 +1175,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 @@ -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_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" ;; *) @@ -1250,23 +1250,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 @@ -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 @@ -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}" @@ -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 @@ -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 @@ -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,15 +1446,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 "" } @@ -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" @@ -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 "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 @@ -1542,7 +1542,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 @@ -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,8 +1616,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}完成" } @@ -1636,11 +1636,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" } @@ -1650,29 +1650,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_FILECF 情報は後で変更できます。" - 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 "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" \ @@ -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 @@ -1696,28 +1696,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 @@ -1733,23 +1733,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 @@ -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,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」を含む行の前に新しい定義を挿入します。 + # 插入新定义,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /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,11 +1881,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 @@ -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,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 @@ -1983,31 +1983,31 @@ nginx_gzip() { web_security() { - send_stats "LDNMP環境防御" + send_stats "LDNMP环境防御" while true; do check_f2b_status check_waf_status check_cf_mode clear - echo -e "サーバー Web サイト防御プログラム${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 "1. 安装防御程序" echo "------------------------" - echo "5. SSH 傍受記録の表示 6. Web サイト傍受記録の表示" - echo "7. 防御ルールのリストを表示します。 8. リアルタイム監視のログを表示します。" + echo "5. 查看SSH拦截记录 6. 查看网站拦截记录" + echo "7. 查看防御规则列表 8. 查看日志实时监控" echo "------------------------" - echo "11. インターセプトパラメータを設定します。 12. ブロックされたすべての IP をクリアします。" + echo "11. 配置拦截参数 12. 清除所有拉黑的IP" echo "------------------------" - echo "21. クラウドフレア モード 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 @@ -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 "クラウドフレアモード" - 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 @@ -2107,21 +2107,21 @@ 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后台,站点-安全性-事件中查看拦截记录" ;; 22) - send_stats "高負荷により5秒シールドが可能" - echo -e "${gl_huang}Web サイトは 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 @@ -2138,23 +2138,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) @@ -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 @@ -2198,21 +2198,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 @@ -2228,33 +2228,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 @@ -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 @@ -2278,23 +2278,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 @@ -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 @@ -2316,7 +2316,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP 環境が高パフォーマンス モードに設定されている" + echo "LDNMP环境已设置成 高性能模式" ;; 3) @@ -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 # } @@ -2386,7 +2386,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "訪問先住所:" +echo "访问地址:" ip_address @@ -2424,31 +2424,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 @@ -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,34 +2477,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 @@ -2514,7 +2514,7 @@ block_container_port() { fi - echo "IP+ポートはサービスへのアクセスをブロックされています" + echo "已阻止IP+端口访问该服务" save_iptables_rules } @@ -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 @@ -2554,17 +2554,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 +2575,7 @@ clear_container_rules() { fi - echo "IP+ポートによるサービスへのアクセスが許可されました" + echo "已允许IP+端口访问该服务" save_iptables_rules } @@ -2589,25 +2589,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 +2616,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 +2648,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,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. 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) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押して、それをデフォルトで使用します。${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 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 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,19 +2860,19 @@ 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) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${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" @@ -3063,11 +3063,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 +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 @@ -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,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 @@ -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,16 +3185,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 +3206,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 @@ -3247,17 +3247,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 @@ -3280,14 +3280,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 @@ -3340,12 +3340,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//') @@ -3358,35 +3358,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 @@ -3395,15 +3395,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') @@ -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" {} + @@ -3442,10 +3442,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 @@ -3459,25 +3459,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 @@ -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 "公式サイト紹介:$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 @@ -3541,20 +3541,20 @@ while true; do panel_app_install add_app_id - send_stats "${panelname}インストール" + send_stats "${panelname}安装" ;; 2) panel_app_manage 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 @@ -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,17 +3620,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 @@ -3640,9 +3640,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 @@ -3662,17 +3662,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 を入力してください [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} @@ -3682,8 +3682,8 @@ remote_port = ${remote_port} EOF - # 生成された情報を出力する - echo "仕える$service_namefrpc.toml に正常に追加されました" + # 输出生成的信息 + echo "服务 $service_name 已成功添加到 frpc.toml" docker restart frpc @@ -3694,12 +3694,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 @@ -3709,7 +3709,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # ヘッダーを印刷します + # 打印表头 printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -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, \ @@ -3739,11 +3739,11 @@ list_forwarding_services() { type } - # 現在のサービス名を更新します + # 更新当前服务名称 if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 前回の値をクリア + # 清除之前的值 local_ip="" local_port="" remote_port="" @@ -3772,7 +3772,7 @@ list_forwarding_services() { } END { - # 最後のサービスに関する情報を出力します + # 打印最后一个服务的信息 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 @@ -3804,18 +3804,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 @@ -3824,7 +3824,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}" @@ -3851,7 +3851,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRPサーバー" + send_stats "FRP服务端" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3859,25 +3859,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 @@ -3885,7 +3885,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 +3895,7 @@ frps_panel() { donlond_frp frps add_app_id - echo "FRPサーバーを更新しました" + echo "FRP服务端已经更新完成" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3906,37 +3906,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服务状态" ;; *) @@ -3949,7 +3949,7 @@ frps_panel() { frpc_panel() { - send_stats "FRPクライアント" + send_stats "FRP客户端" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3957,10 +3957,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 @@ -3968,13 +3968,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 @@ -3982,7 +3982,7 @@ frpc_panel() { configure_frpc add_app_id - echo "FRPクライアントがインストールされています" + echo "FRP客户端已经安装完成" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -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,68 +4049,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. 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 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 をアンインストールしています..." - 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 \ @@ -4118,31 +4118,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" ;; *) @@ -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 @@ -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 @@ -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,13 +4243,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 @@ -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 "未使用の依存関係をクリーンアップします..." + 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 @@ -4327,26 +4327,26 @@ 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アドレス" + 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" @@ -4354,7 +4354,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,14 +4362,14 @@ 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 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 が 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/' \ @@ -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" @@ -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 @@ -4460,17 +4460,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 @@ -4488,7 +4488,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}" } @@ -4497,26 +4497,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 @@ -4527,41 +4527,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" @@ -4577,21 +4577,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 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 + read -e -p "请选择要重装的系统: " sys_choice case "$sys_choice" in 1) - send_stats "debian13を再インストールする" + send_stats "重装debian 13" dd_xitong_3 bash reinstall.sh debian 13 reboot @@ -4599,49 +4599,49 @@ dd_xitong() { ;; 2) - send_stats "debian12を再インストールする" + send_stats "重装debian 12" dd_xitong_1 bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "debian11を再インストールする" + send_stats "重装debian 11" dd_xitong_1 bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "debian10を再インストールする" + 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 @@ -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 @@ -4666,7 +4666,7 @@ dd_xitong() { ;; 23) - send_stats "alma10を再インストールする" + send_stats "重装alma10" dd_xitong_3 bash reinstall.sh almalinux 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 @@ -4714,7 +4714,7 @@ dd_xitong() { ;; 29) - send_stats "centos10を再インストールする" + send_stats "重装centos10" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4722,7 +4722,7 @@ dd_xitong() { ;; 30) - send_stats "centos9を再インストールする" + send_stats "重装centos9" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4730,7 +4730,7 @@ dd_xitong() { ;; 31) - send_stats "アルパインを再インストールする" + send_stats "重装alpine" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4738,7 +4738,7 @@ dd_xitong() { ;; 32) - send_stats "アーチを再インストールする" + send_stats "重装arch" dd_xitong_3 bash reinstall.sh arch reboot @@ -4746,7 +4746,7 @@ dd_xitong() { ;; 33) - send_stats "kaliを再インストールする" + send_stats "重装kali" dd_xitong_3 bash reinstall.sh kali reboot @@ -4754,7 +4754,7 @@ dd_xitong() { ;; 34) - send_stats "オープニューラーを再インストールする" + send_stats "重装openeuler" dd_xitong_3 bash reinstall.sh openeuler 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 "Feiniu を再インストールする" + send_stats "重装飞牛" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4778,7 +4778,7 @@ dd_xitong() { ;; 41) - send_stats "Windows 11を再インストールする" + send_stats "重装windows11" 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 "重装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 @@ -4802,7 +4802,7 @@ dd_xitong() { ;; 44) - send_stats "Windowsサーバー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サーバー22を再インストールします" + send_stats "重装windows server 22" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot @@ -4818,7 +4818,7 @@ dd_xitong() { ;; 46) - send_stats "Windowsサーバー19を再インストールします" + send_stats "重装windows server 19" dd_xitong_2 bash InstallNET.sh -windows 2019 -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 @@ -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 "------------------------" - 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) @@ -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 カーネルをアップグレードして BBR3 を有効にします。" + echo "仅支持Debian/Ubuntu" + echo "请备份数据,将为你升级Linux内核开启BBR3" echo "------------------------------------------------" - read -e -p "続行してもよろしいですか? (はい/いいえ):" choice + read -e -p "确定继续吗?(Y/N): " 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+') @@ -4949,17 +4949,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 +4968,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 } @@ -5009,37 +5009,37 @@ elrepo_install() { elrepo() { root_use - send_stats "Red Hat カーネル管理" + 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 "Red Hat カーネルをアンインストールする" + echo "elrepo内核已卸载。重启后生效" + send_stats "卸载红帽内核" server_reboot ;; @@ -5052,26 +5052,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 "続行してもよろしいですか? (はい/いいえ):" 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 +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 \ @@ -5092,19 +5092,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 +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 \ @@ -5122,8 +5122,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}" } @@ -5135,23 +5135,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 @@ -5160,7 +5160,7 @@ clamav() { ;; 2) - send_stats "重要なディレクトリのスキャン" + send_stats "重要目录扫描" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5168,8 +5168,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 +5186,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 +5212,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 +5253,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 +5294,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 } -# Webサイト構築最適化機能 +# 网站搭建优化函数 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 +5336,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 +5356,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 サイト最適化モード: 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 +5438,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 @@ -5447,17 +5447,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 } @@ -5467,29 +5467,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 +5511,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 +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}#" @@ -5535,9 +5535,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 +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 "有効にすると、重要なファイルを誤って削除することを防ぐために、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 +5615,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 +5623,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 ;; *) @@ -5650,23 +5650,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 "- Enter キーを押して、デフォルトのディレクトリ (/etc /usr /home) を使用します。" - read -r -p "バックアップするディレクトリを入力してください (複数のディレクトリをスペースで区切って、Enter キーを押してデフォルトのディレクトリを使用します)。" 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" # 配置文件和软件包配置 @@ -5674,119 +5674,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 } @@ -5798,56 +5798,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 "キーの内容を貼り付けてください (貼り付け後に Enter を 2 回押します)。" + echo "请粘贴密钥内容 (粘贴完成后按两次回车):" local password_or_key="" while IFS= read -r line; do - # 入力が空行で、キーの内容にすでに先頭が含まれている場合は、入力を終了します + # 如果输入为空行且密钥内容已经包含了开头,则结束输入 if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi - # それが最初の行である場合、またはすでにキーコンテンツの入力を開始している場合は、追加を続けます。 + # 如果是第一行或已经开始输入密钥内容,则继续添加 if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then local password_or_key+="${line}"$'\n' fi done - # キーコンテンツかどうかを確認する + # 检查是否是密钥内容 if [[ "$password_or_key" == *"-----BEGIN"* && "$password_or_key" == *"PRIVATE KEY-----"* ]]; then local key_file="$KEY_DIR/$name.key" echo -n "$password_or_key" > "$key_file" @@ -5856,89 +5856,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 @@ -5950,21 +5950,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 } @@ -5980,156 +5980,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 ;; @@ -6138,64 +6138,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 "- リモートディレクトリ: /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 "キーの内容を貼り付けてください (貼り付け後に Enter を 2 回押します)。" + echo "请粘贴密钥内容 (粘贴完成后按两次回车):" local password_or_key="" while IFS= read -r line; do - # 入力が空行で、キーの内容にすでに先頭が含まれている場合は、入力を終了します + # 如果输入为空行且密钥内容已经包含了开头,则结束输入 if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi - # それが最初の行である場合、またはすでにキーコンテンツの入力を開始している場合は、追加を続けます。 + # 如果是第一行或已经开始输入密钥内容,则继续添加 if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then password_or_key+="${line}"$'\n' fi done - # キーコンテンツかどうかを確認する + # 检查是否是密钥内容 if [[ "$password_or_key" == *"-----BEGIN"* && "$password_or_key" == *"PRIVATE KEY-----"* ]]; then local key_file="$KEY_DIR/${name}_sync.key" echo -n "$password_or_key" > "$key_file" @@ -6203,63 +6203,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 @@ -6270,51 +6270,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 @@ -6322,32 +6322,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="" @@ -6355,66 +6355,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 ;; @@ -6423,9 +6423,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "選択が無効です。もう一度お試しください。" ;; + *) echo "无效的选择,请重试。" ;; esac - read -e -p "続行するには Enter キーを押してください..." + read -e -p "按回车键继续..." done } @@ -6440,7 +6440,7 @@ rsync_manager() { linux_info() { clear - send_stats "システム情報の問い合わせ" + send_stats "系统信息查询" ip_address @@ -6490,41 +6490,41 @@ 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" - 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 @@ -6537,111 +6537,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通信接続ツール" - 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}レンジャーファイル管理ツール" - 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 "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) @@ -6649,7 +6649,7 @@ linux_tools() { install btop clear btop - send_stats "btopをインストールする" + send_stats "安装btop" ;; 12) clear @@ -6658,7 +6658,7 @@ linux_tools() { clear ranger cd ~ - send_stats "レンジャーをインストールする" + send_stats "安装ranger" ;; 13) clear @@ -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 @@ -6694,7 +6694,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "ナノをインストールする" + send_stats "安装nano" ;; @@ -6705,7 +6705,7 @@ linux_tools() { clear git --help cd ~ - send_stats "gitをインストールする" + send_stats "安装git" ;; 21) @@ -6713,67 +6713,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 "ニンベーダーをインストールする" + 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 "インストールされているツール名 (wgetcurlsudohtop) を入力してください:" 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) @@ -6781,7 +6781,7 @@ linux_tools() { ;; *) - echo "無効な入力です!" + echo "无效的输入!" ;; esac break_end @@ -6795,27 +6795,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 "アルパインがBBR3をオープン" + send_stats "alpine开启bbr3" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6857,21 +6857,21 @@ docker_ssh_migration() { list_backups() { local BACKUP_ROOT="/tmp" - 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 -e -p "バックアップするコンテナの名前を入力してください (実行中のすべてのコンテナをバックアップするには、複数のスペースを区切って Enter キーを押します)。" containers + read -e -p "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " 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,28 +6892,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}検出されました$cdocker-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 -e -p "作成ディレクトリが検出されません。パスを手動で入力してください。" project_dir + 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}Compose 项目 [$project_name] 已备份过,跳过重复打包...${NC}" continue fi @@ -6921,137 +6921,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 恢复: $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}" + 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 -e -p "復元するバックアップ ディレクトリを入力してください:" BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリが存在しません${NC}"; return; } + send_stats "Docker还原" + 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 プロジェクトの復元を優先します --------- + # --------- 优先还原 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}Compose 项目 [$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" - 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 @@ -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 @@ -7095,68 +7095,68 @@ 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 "请输入要迁移的备份目录: " 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" - 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; } + 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}" } # ---------------------------- - # メインメニュー + # 主菜单 # ---------------------------- 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 -e -p "選択してください:" choice + read -e -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 @@ -7173,38 +7173,38 @@ linux_docker() { while true; do clear - # send_stats "ドッカー管理" + # 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}不要な 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 ;; @@ -7215,22 +7215,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 "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 "" @@ -7245,8 +7245,8 @@ linux_docker() { 5) while true; do clear - send_stats "Dockerネットワーク管理" - echo "Dockerネットワークリスト" + send_stats "Docker网络管理" + echo "Docker网络列表" echo "------------------------------------------------------------" docker network ls echo "" @@ -7270,36 +7270,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 @@ -7308,8 +7308,8 @@ linux_docker() { ;; 4) - send_stats "ネットワークを削除する" - read -e -p "削除するネットワーク名を入力してください:" dockernetwork + send_stats "删除网络" + read -e -p "请输入要删除的网络名: " dockernetwork docker network rm $dockernetwork ;; @@ -7323,29 +7323,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 @@ -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]) @@ -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,13 +7385,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) ;; @@ -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,151 +7462,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}Yeawu ストリーミング メディアのロック解除の検出" - 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 トリプルネットワークバックホール回線テスト" - 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}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}ベンチパフォーマンステスト" - 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 "Yeawu ストリーミング メディアのロック解除の検出" + 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 "超高速トリプルネットワーク速度テスト" + 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 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 "icu/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 ;; @@ -7616,7 +7616,7 @@ linux_test() { ;; *) - echo "無効な入力です!" + echo "无效的输入!" ;; esac break_end @@ -7632,51 +7632,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}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 "インストールしてもよろしいですか? (はい/いいえ):" 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 コアの数と占有率を入力するよう求めます。ユーザーが Enter キーを押すと、デフォルト値が使用されます。 - 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" \ @@ -7684,14 +7684,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 ;; @@ -7699,20 +7699,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 "続行してもよろしいですか? (はい/いいえ):" 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) @@ -7724,28 +7724,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 - 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) @@ -7756,15 +7756,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 +7785,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 +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 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}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 軽量ブログ 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 ブログ サイトをインストールする" - 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 +7872,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 +7898,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 +7934,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 - # AppleCMS + # 苹果CMS webname="苹果CMS" - send_stats "インストール$webname" - echo "導入を開始する$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7973,24 +7973,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 +8011,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 "ユーザー名: 管理者" - 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 +8075,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 +8088,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 +8113,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 +8126,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 +8152,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 +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格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8193,20 +8193,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 +8217,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 +8235,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 で終わる圧縮パッケージである必要があります。 Pagoda/1panel バックアップ データのインポートをサポートするには、/home/ ディレクトリに配置してください。" - 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 +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 @@ -8278,12 +8278,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 +8296,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 +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" @@ -8332,11 +8332,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 +8356,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 +8379,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 +8397,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 +8431,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 +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格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " 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 "请输入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,23 +8492,23 @@ 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 "バックアップ データをリモート サーバーに転送しますか? (はい/いいえ):" choice + echo "备份文件已创建: /home/$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 /home/*.tar.gz | head -1) @@ -8516,9 +8516,9 @@ 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 "文件已传送至远程服务器home目录。" else - echo "転送するファイルが見つかりませんでした。" + echo "未找到要传送的文件。" fi break ;; @@ -8526,7 +8526,7 @@ linux_ldnmp() { break ;; *) - echo "選択が無効です。Y または N を入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac done @@ -8534,9 +8534,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 @@ -8546,18 +8546,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 ;; *) @@ -8571,19 +8571,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 "Enter キーを押して最新のバックアップを復元し、バックアップ ファイル名を入力して指定したバックアップを復元し、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 @@ -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 ;; @@ -8620,11 +8620,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,13 +8644,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 @@ -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" - 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) (Enter キーを押して最新バージョンを取得します):" 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 @@ -8709,8 +8709,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 +8721,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 @@ -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]) @@ -8769,7 +8769,7 @@ linux_ldnmp() { ;; *) - echo "選択が無効です。Y または N を入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -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..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8813,71 +8813,71 @@ 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 リモート デスクトップ 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}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}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}メモウェブメモ${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}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}Xiaoya alistファミリーバケット" - echo -e "${gl_kjlan}39. ${color39}Bililive ライブ配信録画ツール${gl_kjlan}40. ${color40}webssh 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}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}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}ディープシークチャット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ツールツールボックス" - 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}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}Thunder オフライン ダウンロード ツール${gl_kjlan}78. ${color78}PandaWiki インテリジェント文書管理システム" - echo -e "${gl_kjlan}79. ${color79}Beszel サーバーの監視${gl_kjlan}80. ${color80}リンクワーデンのブックマーク管理" + 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}イミッチピクチャービデオマネージャー${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}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}ペーパーレス文書管理プラットフォーム${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}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}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 @@ -9030,8 +9030,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,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "ネザを構築する" + send_stats "搭建哪吒" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,20 +9073,20 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "ネザモニタリング$check_docker $update_status" - echo "オープンソースの軽量で使いやすいサーバー監視および運用保守ツール" - echo "公式 Web サイト構築ドキュメント: 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}}' 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 "0. 返回上一级选单" echo "------------------------" - read -e -p "選択内容を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -9143,7 +9143,7 @@ while true; do ;; 9|mail) - send_stats "郵便局を建てる" + send_stats "搭建邮局" clear install telnet local app_id="9" @@ -9153,44 +9153,44 @@ 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}}' 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 + 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" @@ -9200,7 +9200,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "続行するには任意のキーを押してください..." + echo "按任意键继续..." read -n 1 -s -r -p "" install jq @@ -9219,9 +9219,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 "" @@ -9244,9 +9244,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 "" ;; @@ -9257,7 +9257,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "アプリがアンインストールされました" + echo "应用已卸载" ;; *) @@ -9291,7 +9291,7 @@ while true; do clear ip_address - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -9301,7 +9301,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 } @@ -9311,7 +9311,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "アプリがアンインストールされました" + echo "应用已卸载" } docker_app_plus @@ -9395,7 +9395,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -9409,7 +9409,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 @@ -9554,7 +9554,7 @@ while true; do ;; 19|safeline) - send_stats "雷のプールを作る" + send_stats "搭建雷池" local app_id="19" local docker_name=safeline-mgt @@ -9562,20 +9562,20 @@ while true; do while true; do check_docker_app clear - echo -e "サンダープールサービス$check_docker" - echo "Leichi は、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}}' 2>/dev/null | grep -q "$docker_name"; 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) @@ -9585,7 +9585,7 @@ while true; do add_app_id clear - echo "Leichi WAFパネルを導入しました" + echo "雷池WAF面板已经安装完成" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9598,7 +9598,7 @@ while true; do add_app_id clear - echo "Leichi WAF パネルが更新されました" + echo "雷池WAF面板已经更新完成" check_docker_app_ip ;; 3) @@ -9609,7 +9609,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" ;; *) @@ -9728,8 +9728,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 \ @@ -10017,7 +10017,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" @@ -10070,7 +10070,7 @@ while true; do ;; 38|xiaoya) - send_stats "シャオヤファミリーバケツ" + send_stats "小雅全家桶" clear install_docker check_disk_space 1 @@ -10274,9 +10274,9 @@ while true; do prometheus_install clear ip_address - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip - echo "初期のユーザー名とパスワードは次のとおりです: admin" + echo "初始用户名密码均为: admin" } docker_app_update() { @@ -10294,7 +10294,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "アプリがアンインストールされました" + echo "应用已卸载" } docker_app_plus @@ -10381,7 +10381,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 ;; @@ -10501,7 +10501,7 @@ while true; do docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -10516,7 +10516,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 @@ -10544,7 +10544,7 @@ while true; do docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -10559,7 +10559,7 @@ while true; do docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -10567,7 +10567,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 @@ -10588,17 +10588,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 "应用已更新" } @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "アプリがアンインストールされました" + echo "应用已卸载" } docker_app_plus @@ -10655,7 +10655,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 } @@ -10671,7 +10671,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 @@ -10933,7 +10933,7 @@ while true; do docker_rum() { - read -e -p "LibreTV のログイン パスワードを設定します。" app_passwd + read -e -p "设置LibreTV的登录密码: " app_passwd docker run -d \ --name libretv \ @@ -10967,9 +10967,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 @@ -10985,7 +10985,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -10999,7 +10999,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 @@ -11072,8 +11072,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 \ @@ -11170,11 +11170,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) @@ -11183,17 +11183,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 } @@ -11203,7 +11203,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11288,7 +11288,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 \ @@ -11392,7 +11392,7 @@ while true; do docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -11405,7 +11405,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 @@ -11566,7 +11566,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 @@ -11618,7 +11618,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -11632,7 +11632,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 @@ -11707,8 +11707,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} \ @@ -11756,7 +11756,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -11770,7 +11770,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 @@ -11810,7 +11810,7 @@ while true; do block_container_port "$docker_name" "$ipv4_address" clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -11824,7 +11824,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 @@ -11842,9 +11842,9 @@ 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 + read -e -p "请输入 WireGuard 网段 (默认 10.13.13.0): " NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11914,18 +11914,18 @@ while true; do sleep 2 echo - echo -e "${gl_huang}すべてのクライアント QR コード構成:${gl_bai}" + 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}" + 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 をダウンロードし、上の 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}${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 } @@ -11953,16 +11953,16 @@ while true; do local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" - # ディレクトリが存在しない場合は作成する + # 创建目录(如果不存在) mkdir -p "$(dirname "$CONFIG_FILE")" - echo "クライアント設定を貼り付け、Enter キーを 2 回押して保存してください。" + echo "请粘贴你的客户端配置,连续按两次回车保存:" - # 変数を初期化する + # 初始化变量 input="" empty_line_count=0 - # ユーザー入力を 1 行ずつ読み取ります + # 逐行读取用户输入 while IFS= read -r line; do if [[ -z "$line" ]]; then ((empty_line_count++)) @@ -11975,10 +11975,10 @@ while true; do fi done - # 設定ファイルの書き込み + # 写入配置文件 echo "$input" > "$CONFIG_FILE" - echo "クライアント設定の保存場所$CONFIG_FILE" + echo "客户端配置已保存到 $CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12023,10 +12023,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 @@ -12043,7 +12043,7 @@ while true; do docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -12057,7 +12057,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 @@ -12097,24 +12097,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" - read -e -p "バックアップ データをリモート サーバーに転送しますか? (はい/いいえ):" choice + 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) @@ -12122,14 +12122,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项目,不包含宝塔,1panel等建站面板的数据备份。" break ;; esac @@ -12139,29 +12139,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 "Enter キーを押して最新のバックアップを復元し、バックアップ ファイル名を入力して指定したバックアップを復元し、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 ;; @@ -12184,35 +12184,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}ワークスペース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 @@ -12220,7 +12220,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "ワークスペースの開始$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -12228,63 +12228,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 ;; @@ -12296,21 +12296,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 ;; @@ -12326,29 +12326,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 @@ -12373,54 +12373,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}ネイティブホスト解像度${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}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}Tech 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 @@ -12428,34 +12428,34 @@ linux_Settings() { 2) clear - send_stats "ログインパスワードを設定する" - echo "ログインパスワードを設定する" + send_stats "设置你的登录密码" + echo "设置你的登录密码" passwd ;; 3) root_use - send_stats "rootパスワードモード" + 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 のバージョン番号を入力します (終了するには 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 @@ -12488,7 +12488,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 @@ -12517,55 +12517,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 @@ -12584,8 +12584,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 @@ -12600,51 +12600,51 @@ 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 "------------------------" 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 "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優先に切り替えました" + 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修復" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; *) @@ -12662,43 +12662,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 "已设置自定义虚拟内存" ;; *) @@ -12711,8 +12711,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 @@ -12723,62 +12723,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" ;; @@ -12791,50 +12791,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 "" @@ -12842,46 +12842,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. 美国西部时间 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 @@ -12924,21 +12924,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 @@ -12956,11 +12956,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 @@ -12968,32 +12968,32 @@ EOF 19) root_use - send_stats "システムアップデートソースを変更する" + send_stats "换系统更新源" clear - echo "更新元リージョンの選択" - echo "LinuxMirror にアクセスしてシステム アップデート ソースを切り替える" + 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 @@ -13001,62 +13001,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 # 跳出循环,退出菜单 @@ -13068,32 +13068,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 # 跳出循环,退出菜单 @@ -13104,24 +13104,24 @@ EOF 22) root_use - send_stats "SSH防御" + 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 -e "SSH防御程序 $check_f2b_status" + 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) f2b_install_sshd @@ -13143,7 +13143,7 @@ EOF 9) remove fail2ban rm -rf /etc/fail2ban - echo "Fail2Ban 防御プログラムがアンインストールされました" + echo "Fail2Ban防御程序已卸载" break ;; *) @@ -13156,47 +13156,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 - # しきい値_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 ~ @@ -13209,15 +13209,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 @@ -13230,40 +13230,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 @@ -13279,18 +13279,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 "続行してもよろしいですか? (はい/いいえ):" 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 @@ -13312,7 +13312,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 @@ -13323,21 +13323,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 @@ -13381,7 +13381,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; } @@ -13404,62 +13404,62 @@ EOF 41) clear - send_stats "掲示板" - echo "Technology Lion の公式掲示板をご覧ください。脚本についてのアイデアがあれば、メッセージを残して交換してください。" + send_stats "留言板" + echo "访问科技lion官方留言板,您对脚本有任何想法欢迎留言交流!" echo "https://board.kejilion.pro" - echo "公開パスワード: kejilion.sh" + echo "公共密码: kejilion.sh" ;; 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 "ワンクリックメンテナンスを実行してもよろしいですか? (はい/いいえ):" 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) @@ -13476,25 +13476,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 @@ -13502,7 +13502,7 @@ EOF 99) clear - send_stats "システムを再起動します" + send_stats "重启系统" server_reboot ;; 100) @@ -13518,32 +13518,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 @@ -13559,11 +13559,11 @@ EOF 102) clear - send_stats "Tech Lion スクリプトをアンインストールする" - echo "Tech Lion スクリプトをアンインストールする" + send_stats "卸载科技lion脚本" + echo "卸载科技lion脚本" echo "------------------------------------------------" - echo "kejilion スクリプトは、他の機能に影響を与えることなく完全にアンインストールされます。" - read -e -p "続行してもよろしいですか? (はい/いいえ):" choice + echo "将彻底卸载kejilion脚本,不影响你其他功能" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) @@ -13571,16 +13571,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 ;; @@ -13590,7 +13590,7 @@ EOF ;; *) - echo "無効な入力です!" + echo "无效的输入!" ;; esac break_end @@ -13608,187 +13608,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. 解压文件目录 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 "请输入远端服务器用户名 (默认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 @@ -14086,15 +14086,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 ;; *) @@ -14116,41 +14116,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スクリプト・コレクション" -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}Eudemons Parlu サーバー開始スクリプト" +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_info ;; - 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 ;; @@ -14161,13 +14161,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "Eudemons Parlu サーバー開始スクリプト" ; 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 @@ -14175,70 +14175,70 @@ 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 アップデートを更新 | kアップデート" -echo "クリーン系ジャンククリーン |きれいだ" -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 "rsync リモート同期ツール k rsync | k リモート同期" -echo "ハードディスク管理ツール k ディスク | k ハードディスクの管理" -echo "イントラネット普及率 (サーバー) k frps" -echo "イントラネット浸透率 (クライアント) k frpc" -echo "ソフトウェア起動 k start sshd | 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 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 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 ロード バランシング |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 お気に入り | k コマンドのお気に入り" -echo "アプリケーションマーケット管理kアプリ" -echo "申請番号の迅速な管理 k app 26 | kアプリ1パネル | k アプリ npm" -echo "システム情報を表示 k info" +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" +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 "显示系统信息 k info" } 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|更新) @@ -14272,7 +14272,7 @@ else rsync_run) shift - send_stats "スケジュールされたrsync同期" + send_stats "定时rsync同步" run_task "$@" ;; @@ -14291,7 +14291,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" @@ -14304,13 +14304,13 @@ else swap) shift - send_stats "仮想メモリをすばやくセットアップする" + send_stats "快速设置虚拟内存" add_swap "$@" ;; time|时区) shift - send_stats "タイムゾーンを素早く設定" + send_stats "快速设置时区" set_timedate "$@" ;; @@ -14358,42 +14358,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 @@ -14403,15 +14403,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 ;; *) @@ -14438,7 +14438,7 @@ else app) shift - send_stats "申し込む$@" + send_stats "应用$@" linux_panel "$@" ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index a3dc2d606..b3957f8b5 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -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" ;; @@ -1525,7 +1525,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. 국내 등록 제한 ➠ 중국 ​​본토 환경의 경우 도메인 이름 등록 여부를 확인하시기 바랍니다." @@ -2112,7 +2112,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}" @@ -3185,7 +3185,7 @@ nginx_install_status() { ldnmp_web_on() { clear - echo "당신의$webname지어졌습니다!" + echo "당신의$webname건설되었습니다!" echo "https://$yuming" echo "------------------------" echo "$webname설치 정보는 다음과 같습니다." @@ -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 ;; @@ -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 @@ -5038,7 +5038,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 @@ -5056,7 +5056,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 @@ -5092,7 +5092,7 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "스캔할 디렉터리를 지정하십시오." + echo "스캔할 디렉터리를 지정하세요." return fi @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "하드디스크 관리 기능" while true; do clear - echo "하드 드라이브 파티션 관리" + echo "하드 디스크 파티션 관리" echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions @@ -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 @@ -6571,7 +6571,7 @@ linux_tools() { clear echo "도구가 설치되었으며 다음과 같이 사용됩니다." curl --help - send_stats "컬 설치" + send_stats "安装curl" ;; 2) clear @@ -6579,69 +6579,69 @@ linux_tools() { clear 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) @@ -6649,7 +6649,7 @@ linux_tools() { install btop clear btop - send_stats "btop 설치" + send_stats "安装btop" ;; 12) clear @@ -6658,7 +6658,7 @@ linux_tools() { clear ranger cd ~ - send_stats "레인저 설치" + send_stats "安装ranger" ;; 13) clear @@ -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 @@ -6694,7 +6694,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "나노 설치" + send_stats "安装nano" ;; @@ -6705,7 +6705,7 @@ linux_tools() { clear git --help cd ~ - send_stats "자식 설치" + send_stats "安装git" ;; 21) @@ -6713,67 +6713,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 "닌베이더 설치" + 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 컬 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) @@ -6781,7 +6781,7 @@ linux_tools() { ;; *) - echo "입력이 잘못되었습니다!" + echo "无效的输入!" ;; esac break_end @@ -6795,27 +6795,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 @@ -6857,21 +6857,21 @@ docker_ssh_migration() { list_backups() { local BACKUP_ROOT="/tmp" - 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 "도커 백업" + 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 "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " 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,28 +6892,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도커 작성 컨테이너입니다${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 -e -p "작성 디렉터리가 감지되지 않습니다. 경로를 수동으로 입력하세요." project_dir + 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}Compose 项目 [$project_name] 已备份过,跳过重复打包...${NC}" continue fi @@ -6921,137 +6921,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 恢复: $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}" + 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 "도커 복원" - read -e -p "복원할 백업 디렉터리를 입력하십시오:" BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉터리가 존재하지 않습니다.${NC}"; return; } + send_stats "Docker还原" + 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 프로젝트 복원 우선순위 지정 --------- + # --------- 优先还原 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 프로젝트의 컨테이너가 이미 실행 중인지 확인하세요. + # 检查该 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 -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" - 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 @@ -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 @@ -7095,68 +7095,68 @@ docker_ssh_migration() { # ---------------------------- - # 이주하다 + # 迁移 # ---------------------------- migrate_docker() { - send_stats "도커 마이그레이션" + 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 - 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" - 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; } + 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}" } # ---------------------------- - # 메인 메뉴 + # 主菜单 # ---------------------------- 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. 도커 프로젝트 백업" - echo -e "2. 도커 프로젝트 마이그레이션" - echo -e "3. 도커 프로젝트 복원" - 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 -e -p "선택하세요:" choice + read -e -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 @@ -7173,38 +7173,38 @@ linux_docker() { while true; do clear - # send_stats "도커 관리" - 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 전역 상태 보기${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 "도커 환경 설치" + send_stats "安装docker环境" install_add_docker ;; @@ -7215,22 +7215,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 "Docker 볼륨:${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 "" @@ -7245,8 +7245,8 @@ linux_docker() { 5) while true; do clear - send_stats "도커 네트워크 관리" - echo "도커 네트워크 목록" + send_stats "Docker网络管理" + echo "Docker网络列表" echo "------------------------------------------------------------" docker network ls echo "" @@ -7270,36 +7270,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 @@ -7308,8 +7308,8 @@ linux_docker() { ;; 4) - send_stats "네트워크 삭제" - read -e -p "삭제할 네트워크 이름을 입력하세요:" dockernetwork + send_stats "删除网络" + read -e -p "请输入要删除的网络名: " dockernetwork docker network rm $dockernetwork ;; @@ -7323,29 +7323,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 @@ -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]) @@ -7363,7 +7363,7 @@ linux_docker() { [Nn]) ;; *) - echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7376,7 +7376,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]) @@ -7385,13 +7385,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) ;; @@ -7407,13 +7407,13 @@ linux_docker() { 11) clear - send_stats "도커 v6 켜짐" + send_stats "Docker v6 开" docker_ipv6_on ;; 12) clear - send_stats "도커 v6 닫기" + send_stats "Docker v6 关" docker_ipv6_off ;; @@ -7424,7 +7424,7 @@ linux_docker() { 20) clear - send_stats "도커 제거" + 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,151 +7462,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}예우 스트리밍 미디어 잠금 해제 감지" - 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 삼중 네트워크 백홀 회선 테스트" - 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 세 개의 네트워크 라인 테스트" - 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}벤치 성능 테스트" - 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 "예우 스트리밍 미디어 잠금 해제 감지" + 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 "초고속 트리플 네트워크 속도 테스트" + 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 "벤치 성능 테스트" + 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 ;; @@ -7616,7 +7616,7 @@ linux_test() { ;; *) - echo "입력이 잘못되었습니다!" + echo "无效的输入!" ;; esac break_end @@ -7632,51 +7632,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}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 "설치하시겠습니까? (예/아니요):" 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 코어 수와 점유율을 입력하라는 메시지를 표시합니다. 사용자가 Enter 키를 누르면 기본값이 사용됩니다. - 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容器 docker run -itd --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ @@ -7684,14 +7684,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 ;; @@ -7699,20 +7699,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 "계속하시겠습니까? (예/아니요):" 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. 우분투20.04:" sys_choice + read -e -p "请选择要重装的系统: 1. Debian12 | 2. Ubuntu20.04 : " sys_choice case "$sys_choice" in 1) @@ -7724,28 +7724,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 - 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) @@ -7756,15 +7756,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 +7785,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 +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}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 포럼 웹사이트 설치${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 +7872,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 +7898,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 +7934,20 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "데이터베이스 주소: mysql" - echo "사용자 이름:$dbuse" - echo "비밀번호:$dbusepasswd" - echo "데이터베이스 이름:$dbname" - echo "레디스 호스트: 레디스" + echo "数据库地址: mysql" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库名: $dbname" + echo "redis主机: redis" ;; 5) clear - # AppleCMS + # 苹果CMS webname="苹果CMS" - send_stats "설치하다$webname" - echo "배포 시작$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7973,24 +7973,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 +8011,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 "레디스 주소 : 레디스" - echo "redis 비밀번호: 기본적으로 입력되지 않음" - echo "레디스 포트: 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论坛 webname="flarum论坛" - send_stats "설치하다$webname" - echo "배포 시작$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8075,12 +8075,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 +8088,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 +8113,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 +8126,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 +8152,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 +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格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8193,20 +8193,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 +8217,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 +8235,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로 끝나는 압축 패키지여야 합니다. Pagoda/1panel 백업 데이터 가져오기를 지원하려면 /home/ 디렉토리에 넣으십시오." - 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 +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 @@ -8278,12 +8278,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 +8296,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 +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" @@ -8332,11 +8332,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 +8356,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 +8379,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 +8397,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 +8431,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 +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格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " 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 "请输入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,23 +8492,23 @@ 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 "백업 데이터를 원격 서버로 전송하시겠습니까? (예/아니요):" choice + echo "备份文件已创建: /home/$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 /home/*.tar.gz | head -1) @@ -8516,9 +8516,9 @@ 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 "文件已传送至远程服务器home目录。" else - echo "전송할 파일을 찾을 수 없습니다." + echo "未找到要传送的文件。" fi break ;; @@ -8526,7 +8526,7 @@ linux_ldnmp() { break ;; *) - echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." + echo "无效的选择,请输入 Y 或 N。" ;; esac done @@ -8534,9 +8534,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 @@ -8546,18 +8546,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 ;; *) @@ -8571,19 +8571,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 "최신 백업을 복원하려면 Enter 키를 누르고, 지정된 백업을 복원하려면 백업 파일 이름을 입력하고, 종료하려면 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 @@ -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 ;; @@ -8620,11 +8620,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,13 +8644,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 @@ -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" - 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)(최신 버전을 얻으려면 Enter 키를 누르세요):" 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 @@ -8709,8 +8709,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 +8721,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 @@ -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]) @@ -8769,7 +8769,7 @@ linux_ldnmp() { ;; *) - echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -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..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8813,71 +8813,71 @@ while true; do fi done - 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}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}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}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}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 패널 탐색 패널${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}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}도커 가속 스테이션${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}라마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}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}비트워든 비밀번호 관리자${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}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}코마리 서버 모니터링 도구${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}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}종이 없는 문서 관리 플랫폼${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}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}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 @@ -9030,8 +9030,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,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "네자 빌드" + send_stats "搭建哪吒" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,20 +9073,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 "哪吒监控 $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 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) @@ -9143,7 +9143,7 @@ while true; do ;; 9|mail) - send_stats "우체국을 짓다" + send_stats "搭建邮局" clear install telnet local app_id="9" @@ -9153,44 +9153,44 @@ 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}}' 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 + 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" @@ -9200,7 +9200,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "계속하려면 아무 키나 누르세요..." + echo "按任意键继续..." read -n 1 -s -r -p "" install jq @@ -9219,9 +9219,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 "" @@ -9244,9 +9244,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 "" ;; @@ -9257,7 +9257,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "앱이 제거되었습니다." + echo "应用已卸载" ;; *) @@ -9291,7 +9291,7 @@ while true; do clear ip_address - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -9301,7 +9301,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 } @@ -9311,7 +9311,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "앱이 제거되었습니다." + echo "应用已卸载" } docker_app_plus @@ -9395,7 +9395,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -9409,7 +9409,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 @@ -9554,7 +9554,7 @@ while true; do ;; 19|safeline) - send_stats "천둥 웅덩이를 만들어라" + send_stats "搭建雷池" local app_id="19" local docker_name=safeline-mgt @@ -9562,20 +9562,20 @@ while true; do while true; do check_docker_app clear - echo -e "썬더 풀 서비스$check_docker" - echo "레이치(Leichi)는 창팅테크놀로지(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}}' 2>/dev/null | grep -q "$docker_name"; 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) @@ -9585,7 +9585,7 @@ while true; do add_app_id clear - echo "Leichi WAF 패널이 설치되었습니다." + echo "雷池WAF面板已经安装完成" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9598,7 +9598,7 @@ while true; do add_app_id clear - echo "Leichi WAF 패널이 업데이트되었습니다." + echo "雷池WAF面板已经更新完成" check_docker_app_ip ;; 3) @@ -9609,7 +9609,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" ;; *) @@ -9728,8 +9728,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 \ @@ -10017,7 +10017,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" @@ -10070,7 +10070,7 @@ while true; do ;; 38|xiaoya) - send_stats "Xiaoya 가족 버킷" + send_stats "小雅全家桶" clear install_docker check_disk_space 1 @@ -10274,9 +10274,9 @@ while true; do prometheus_install clear ip_address - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip - echo "초기 사용자 이름과 비밀번호는 admin입니다." + echo "初始用户名密码均为: admin" } docker_app_update() { @@ -10294,7 +10294,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "앱이 제거되었습니다." + echo "应用已卸载" } docker_app_plus @@ -10381,7 +10381,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 ;; @@ -10501,7 +10501,7 @@ while true; do docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -10516,7 +10516,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 @@ -10544,7 +10544,7 @@ while true; do docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -10559,7 +10559,7 @@ while true; do docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -10567,7 +10567,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 @@ -10588,17 +10588,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 "应用已更新" } @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "앱이 제거되었습니다." + echo "应用已卸载" } docker_app_plus @@ -10655,7 +10655,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 } @@ -10671,7 +10671,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 @@ -10933,7 +10933,7 @@ while true; do docker_rum() { - read -e -p "LibreTV 로그인 비밀번호 설정:" app_passwd + read -e -p "设置LibreTV的登录密码: " app_passwd docker run -d \ --name libretv \ @@ -10967,9 +10967,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 @@ -10985,7 +10985,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -10999,7 +10999,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 @@ -11072,8 +11072,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 \ @@ -11170,11 +11170,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) @@ -11183,17 +11183,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 } @@ -11203,7 +11203,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11288,7 +11288,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 \ @@ -11392,7 +11392,7 @@ while true; do docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -11405,7 +11405,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 @@ -11566,7 +11566,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 @@ -11618,7 +11618,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -11632,7 +11632,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 @@ -11707,8 +11707,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} \ @@ -11756,7 +11756,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -11770,7 +11770,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 @@ -11810,7 +11810,7 @@ while true; do block_container_port "$docker_name" "$ipv4_address" clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -11824,7 +11824,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 @@ -11842,9 +11842,9 @@ 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 + read -e -p "请输入 WireGuard 网段 (默认 10.13.13.0): " NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11914,18 +11914,18 @@ while true; do sleep 2 echo - echo -e "${gl_huang}모든 클라이언트 QR 코드 구성:${gl_bai}" + 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}" + 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을 다운로드하고 위의 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}${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 } @@ -11953,16 +11953,16 @@ while true; do local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" - # 디렉터리가 없으면 생성 + # 创建目录(如果不存在) mkdir -p "$(dirname "$CONFIG_FILE")" - echo "클라이언트 구성을 붙여넣고 Enter를 두 번 눌러 저장하세요." + echo "请粘贴你的客户端配置,连续按两次回车保存:" - # 변수 초기화 + # 初始化变量 input="" empty_line_count=0 - # 사용자 입력을 한 줄씩 읽습니다. + # 逐行读取用户输入 while IFS= read -r line; do if [[ -z "$line" ]]; then ((empty_line_count++)) @@ -11975,10 +11975,10 @@ while true; do fi done - # 구성 파일 쓰기 + # 写入配置文件 echo "$input" > "$CONFIG_FILE" - echo "클라이언트 구성이 다음에 저장되었습니다.$CONFIG_FILE" + echo "客户端配置已保存到 $CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12023,10 +12023,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 @@ -12043,7 +12043,7 @@ while true; do docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -12057,7 +12057,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 @@ -12097,24 +12097,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" - read -e -p "백업 데이터를 원격 서버로 전송하시겠습니까? (예/아니요):" choice + 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) @@ -12122,14 +12122,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 등 웹사이트 구축 패널의 데이터 백업은 포함되지 않습니다." + echo "注意: 目前备份仅包含docker项目,不包含宝塔,1panel等建站面板的数据备份。" break ;; esac @@ -12139,29 +12139,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 "최신 백업을 복원하려면 Enter 키를 누르고, 지정된 백업을 복원하려면 백업 파일 이름을 입력하고, 종료하려면 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 ;; @@ -12184,35 +12184,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 @@ -12220,7 +12220,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "작업공간 시작$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -12228,63 +12228,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 ;; @@ -12296,21 +12296,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 ;; @@ -12326,29 +12326,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 "다음과 같이 백그라운드에서 실행하려는 명령을 입력하십시오. 컬 -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 @@ -12373,54 +12373,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}기본 호스트 확인${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}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 @@ -12428,34 +12428,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 "현재 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 @@ -12488,7 +12488,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 @@ -12517,55 +12517,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 @@ -12584,8 +12584,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 @@ -12600,51 +12600,51 @@ 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 "------------------------" 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 "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 우선순위로 전환됨" + 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 수리" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; *) @@ -12662,43 +12662,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 "已设置自定义虚拟内存" ;; *) @@ -12711,8 +12711,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 @@ -12723,62 +12723,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" ;; @@ -12791,50 +12791,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 "" @@ -12842,46 +12842,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. 美国西部时间 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 @@ -12924,21 +12924,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 @@ -12956,11 +12956,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 @@ -12968,32 +12968,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 @@ -13001,62 +13001,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 # 跳出循环,退出菜单 @@ -13068,32 +13068,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 # 跳出循环,退出菜单 @@ -13104,24 +13104,24 @@ EOF 22) root_use - send_stats "SSH 방어" + 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 -e "SSH防御程序 $check_f2b_status" + 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) f2b_install_sshd @@ -13143,7 +13143,7 @@ EOF 9) remove fail2ban rm -rf /etc/fail2ban - echo "Fail2Ban 방어 프로그램이 제거되었습니다." + echo "Fail2Ban防御程序已卸载" break ;; *) @@ -13156,47 +13156,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 ~ @@ -13209,15 +13209,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 @@ -13230,40 +13230,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 @@ -13279,18 +13279,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 로봇 API 및 사용자 ID를 구성해야 합니다." - echo "임계값에 도달하면 경고 메시지가 사용자에게 전송됩니다." - echo -e "${gl_hui}- 트래픽에 관해서는 서버를 다시 시작하면 다시 계산됩니다 -${gl_bai}" - read -e -p "계속하시겠습니까? (예/아니요):" 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 @@ -13312,7 +13312,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 @@ -13323,21 +13323,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 @@ -13381,7 +13381,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; } @@ -13404,62 +13404,62 @@ EOF 41) clear - send_stats "메시지 보드" - echo "Technology Lion 공식 게시판을 방문해 보세요. 스크립트에 대한 아이디어가 있으시면 교환 메시지를 남겨주세요!" + send_stats "留言板" + echo "访问科技lion官方留言板,您对脚本有任何想法欢迎留言交流!" echo "https://board.kejilion.pro" - echo "공개 비밀번호: kejilion.sh" + echo "公共密码: kejilion.sh" ;; 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 "원클릭 유지 관리를 원하시나요? (예/아니요):" 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) @@ -13476,25 +13476,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 @@ -13502,7 +13502,7 @@ EOF 99) clear - send_stats "시스템을 다시 시작하세요" + send_stats "重启系统" server_reboot ;; 100) @@ -13518,32 +13518,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 @@ -13559,11 +13559,11 @@ EOF 102) clear - send_stats "기술 사자 스크립트 제거" - echo "기술 사자 스크립트 제거" + send_stats "卸载科技lion脚本" + echo "卸载科技lion脚本" echo "------------------------------------------------" - echo "kejilion 스크립트는 다른 기능에 영향을 주지 않고 완전히 제거됩니다." - read -e -p "계속하시겠습니까? (예/아니요):" choice + echo "将彻底卸载kejilion脚本,不影响你其他功能" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) @@ -13571,16 +13571,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 ;; @@ -13590,7 +13590,7 @@ EOF ;; *) - echo "입력이 잘못되었습니다!" + echo "无效的输入!" ;; esac break_end @@ -13608,187 +13608,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. 解压文件目录 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 @@ -14086,15 +14086,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 ;; *) @@ -14116,41 +14116,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}Eudemons Parlu 서버 오픈 스크립트" +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_info ;; - 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 ;; @@ -14161,13 +14161,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "Eudemons Parlu 서버 오픈 스크립트" ; 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 @@ -14175,70 +14175,70 @@ 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 제거 nano wget | k 델 나노 wget | k 나노 wget 제거 | k 나노 wget 제거" -echo "시스템 k 업데이트 업데이트 | 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 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 "도커 관리 플레인 k 도커" -echo "docker 환경 설치 k docker 설치 |k docker 설치" -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 "역방향 프록시 설치 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 즐겨찾기 | k 명령 즐겨찾기" -echo "애플리케이션 시장 관리 k app" -echo "신청번호의 빠른 관리 k app 26 | k 앱 1패널 | k 앱 npm" -echo "시스템 정보 표시 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" +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 "显示系统信息 k info" } 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|更新) @@ -14272,7 +14272,7 @@ else rsync_run) shift - send_stats "예약된 rsync 동기화" + send_stats "定时rsync同步" run_task "$@" ;; @@ -14291,7 +14291,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" @@ -14304,13 +14304,13 @@ else swap) shift - send_stats "가상 메모리를 빠르게 설정하세요" + send_stats "快速设置虚拟内存" add_swap "$@" ;; time|时区) shift - send_stats "시간대를 빠르게 설정" + send_stats "快速设置时区" set_timedate "$@" ;; @@ -14358,42 +14358,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 @@ -14403,15 +14403,15 @@ else shift case $1 in install|安装) - send_stats "도커를 빠르게 설치하세요" + send_stats "快捷安装docker" install_docker ;; ps|容器) - send_stats "빠른 컨테이너 관리" + send_stats "快捷容器管理" docker_ps ;; img|镜像) - send_stats "빠른 이미지 관리" + send_stats "快捷镜像管理" docker_image ;; *) @@ -14438,7 +14438,7 @@ else app) shift - send_stats "신청$@" + send_stats "应用$@" linux_panel "$@" ;; From 19b7dcefdc2f4c345e05365ffbbb77eb6834e1ed Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 28 Dec 2025 04:27:20 +0000 Subject: [PATCH 13/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=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 | 96 +- jp/kejilion.sh | 4718 ++++++++++++++++++++++++------------------------ kr/kejilion.sh | 2562 +++++++++++++------------- 3 files changed, 3688 insertions(+), 3688 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index eae55fc90..540c70603 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -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. @@ -765,7 +765,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}" } @@ -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 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 @@ -953,12 +953,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() { @@ -2540,7 +2540,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 @@ -2559,7 +2559,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 @@ -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 "App has been uninstalled" + echo "App uninstalled" send_stats "uninstall$docker_name" ;; @@ -3665,7 +3665,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} @@ -3906,7 +3906,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" @@ -4003,7 +4003,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) @@ -4510,7 +4510,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 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 } @@ -5312,7 +5312,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 @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "Website optimization mode" + send_stats "Website optimization model" ;; 4) cd ~ @@ -5654,9 +5654,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 @@ -5698,7 +5698,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[@]}" @@ -6119,7 +6119,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 @@ -6537,7 +6537,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}" @@ -6951,7 +6951,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") @@ -7112,7 +7112,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 @@ -7479,7 +7479,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}------------------------" @@ -8815,7 +8815,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}------------------------" @@ -9153,7 +9153,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" @@ -9257,7 +9257,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" ;; *) @@ -9311,7 +9311,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 @@ -9409,7 +9409,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 @@ -10294,7 +10294,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 @@ -10516,7 +10516,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 @@ -10567,7 +10567,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 @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -10671,7 +10671,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 @@ -10999,7 +10999,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11405,7 +11405,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 @@ -11632,7 +11632,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 @@ -11770,7 +11770,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 @@ -11824,7 +11824,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 @@ -12057,7 +12057,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 @@ -12140,7 +12140,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 "" @@ -12198,7 +12198,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" @@ -12875,7 +12875,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 "------------------------" @@ -13175,7 +13175,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 @@ -13433,7 +13433,7 @@ EOF case "$choice" in [Yy]) clear - send_stats "One-stop tuning starts" + send_stats "One-stop tuning started" echo "------------------------------------------------" linux_update echo -e "[${gl_lv}OK${gl_bai}] 1/10. Update the system to the latest" @@ -13839,7 +13839,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 @@ -13990,7 +13990,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 "" @@ -14175,7 +14175,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 d95435dd8..aa0e4a500 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}テクノロジー ライオン スクリプト ツールボックスへようこそ${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 @@ -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 "最小需求空间: ${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 @@ -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 @@ -261,14 +261,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" @@ -281,43 +281,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 } @@ -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}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 @@ -502,63 +502,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]) @@ -567,28 +567,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 "------------------------------------------------------------" @@ -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) @@ -622,8 +622,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) @@ -642,44 +642,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]) @@ -688,7 +688,7 @@ while true; do [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "選択が無効です。Y または N を入力してください。" ;; esac ;; @@ -756,16 +756,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}" } @@ -777,27 +777,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 @@ -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 状态 + # 現在の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,117 +872,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がブロックされました" } @@ -992,7 +992,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 @@ -1002,12 +1002,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 @@ -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_code 的 IP 区域文件失败" + echo "エラー: ダウンロード$country_codeIPゾーンファイルが失敗しました" continue fi @@ -1052,7 +1052,7 @@ manage_country_rules() { iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP - echo "已成功阻止 $country_code 的 IP 地址" + echo "正常にブロックされました$country_codeIPアドレス" rm "${country_code,,}.zone" ;; @@ -1062,7 +1062,7 @@ manage_country_rules() { fi if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" + 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_code 的 IP 地址" + echo "正常に許可されました$country_codeIPアドレス" rm "${country_code,,}.zone" ;; @@ -1086,11 +1086,11 @@ manage_country_rules() { ipset destroy "$ipset_name" fi - echo "已成功解除 $country_code 的 IP 地址限制" + echo "正常に削除されました$country_codeIPアドレス制限" ;; *) - echo "用法: manage_country_rules {block|allow|unblock} " + echo "使用法: manage_country_rules {block|allow|unblock} " ;; esac done @@ -1111,42 +1111,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. 指定した国の IP をブロックする 16. 指定した国の IP のみを許可する" + echo "17. 指定国における知的財産制限を解除する" 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 @@ -1159,10 +1159,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 @@ -1175,40 +1175,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 @@ -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_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" ;; *) @@ -1250,23 +1250,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 @@ -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 @@ -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}" @@ -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 @@ -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 @@ -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,15 +1446,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 "" } @@ -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" @@ -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 "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 @@ -1542,7 +1542,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 @@ -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,8 +1616,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}仕上げる" } @@ -1636,11 +1636,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" } @@ -1650,29 +1650,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_FILECF 情報は後で変更できます。" + 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 "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 @@ -1696,28 +1696,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 @@ -1733,23 +1733,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 @@ -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,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" 的行前 + # 「Happy Publishing」を含む行の前に新しい定義を挿入します。 awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /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,11 +1881,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 @@ -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,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 @@ -1983,31 +1983,31 @@ nginx_gzip() { web_security() { - send_stats "LDNMP环境防御" + send_stats "LDNMP環境防御" while true; do check_f2b_status check_waf_status check_cf_mode clear - echo -e "服务器网站防御程序 ${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. 查看网站拦截记录" - echo "7. 查看防御规则列表 8. 查看日志实时监控" + echo "5. SSH 傍受記録の表示 6. Web サイト傍受記録の表示" + echo "7. 防御ルールのリストを表示します。 8. リアルタイム監視のログを表示します。" echo "------------------------" - echo "11. 配置拦截参数 12. 清除所有拉黑的IP" + 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防御" + 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 @@ -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模式" - echo "到cf后台右上角我的个人资料,选择左侧API令牌,获取Global API Key" + send_stats "クラウドフレアモード" + 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 @@ -2107,21 +2107,21 @@ 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}" + 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 -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 @@ -2138,23 +2138,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) @@ -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 @@ -2198,21 +2198,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 @@ -2228,33 +2228,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 @@ -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 @@ -2278,23 +2278,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 @@ -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 @@ -2316,7 +2316,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP环境已设置成 高性能模式" + echo "LDNMP 環境が高パフォーマンス モードに設定されている" ;; 3) @@ -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 # } @@ -2386,7 +2386,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "访问地址:" +echo "訪問先住所:" ip_address @@ -2424,31 +2424,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 @@ -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,34 +2477,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 @@ -2514,7 +2514,7 @@ block_container_port() { fi - echo "已阻止IP+端口访问该服务" + echo "IP+ポートはサービスへのアクセスをブロックされています" save_iptables_rules } @@ -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 @@ -2554,17 +2554,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 +2575,7 @@ clear_container_rules() { fi - echo "已允许IP+端口访问该服务" + echo "IP+ポートによるサービスへのアクセスが許可されました" save_iptables_rules } @@ -2589,25 +2589,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 +2616,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 +2648,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,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. 阻止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) 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,12 +2771,12 @@ while true; do 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 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,19 +2860,19 @@ 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) 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,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" @@ -3063,11 +3063,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 +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 @@ -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,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 @@ -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,16 +3185,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 +3206,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 @@ -3247,17 +3247,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 @@ -3280,14 +3280,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 @@ -3340,12 +3340,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//') @@ -3358,35 +3358,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 @@ -3395,15 +3395,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') @@ -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" {} + @@ -3442,10 +3442,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 @@ -3459,25 +3459,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 @@ -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 "官网介绍: $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 @@ -3541,20 +3541,20 @@ while true; do panel_app_install add_app_id - send_stats "${panelname}安装" + send_stats "${panelname}インストール" ;; 2) panel_app_manage 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 @@ -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,17 +3620,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 @@ -3640,9 +3640,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 @@ -3662,17 +3662,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 にするには Enter キーを押してください]:" 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 + 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_name 已成功添加到 frpc.toml" + # 生成された情報を出力する + echo "仕える$service_namefrpc.toml に正常に追加されました" docker restart frpc @@ -3694,12 +3694,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 @@ -3709,7 +3709,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # 打印表头 + # ヘッダーを印刷します printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -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, \ @@ -3739,11 +3739,11 @@ list_forwarding_services() { type } - # 更新当前服务名称 + # 現在のサービス名を更新します if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 清除之前的值 + # 前回の値をクリア local_ip="" local_port="" remote_port="" @@ -3772,7 +3772,7 @@ list_forwarding_services() { } END { - # 打印最后一个服务的信息 + # 最後のサービスに関する情報を出力します 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 @@ -3804,18 +3804,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 @@ -3824,7 +3824,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}" @@ -3851,7 +3851,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRP服务端" + send_stats "FRPサーバー" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3859,25 +3859,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 @@ -3885,7 +3885,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 +3895,7 @@ frps_panel() { donlond_frp frps add_app_id - echo "FRP服务端已经更新完成" + echo "FRPサーバーを更新しました" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3906,37 +3906,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サービスステータスが更新されました" ;; *) @@ -3949,7 +3949,7 @@ frps_panel() { frpc_panel() { - send_stats "FRP客户端" + send_stats "FRPクライアント" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3957,10 +3957,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 @@ -3968,13 +3968,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 @@ -3982,7 +3982,7 @@ frpc_panel() { configure_frpc add_app_id - echo "FRP客户端已经安装完成" + echo "FRPクライアントがインストールされています" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -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,68 +4049,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. 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 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..." - 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 \ @@ -4118,31 +4118,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" ;; *) @@ -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 @@ -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 @@ -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,13 +4243,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 @@ -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 "清理未使用的依赖..." + 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 @@ -4327,26 +4327,26 @@ 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地址" + 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" @@ -4354,7 +4354,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,14 +4362,14 @@ 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 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 设置为 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/' \ @@ -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" @@ -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 @@ -4460,17 +4460,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 @@ -4488,7 +4488,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}" } @@ -4497,26 +4497,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 @@ -4527,41 +4527,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" @@ -4577,21 +4577,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 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 + 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,49 +4599,49 @@ 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 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 @@ -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 @@ -4666,7 +4666,7 @@ dd_xitong() { ;; 23) - send_stats "重装alma10" + send_stats "alma10を再インストールする" dd_xitong_3 bash reinstall.sh almalinux 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 @@ -4714,7 +4714,7 @@ dd_xitong() { ;; 29) - send_stats "重装centos10" + send_stats "centos10を再インストールする" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4722,7 +4722,7 @@ dd_xitong() { ;; 30) - send_stats "重装centos9" + send_stats "centos9を再インストールする" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4730,7 +4730,7 @@ dd_xitong() { ;; 31) - send_stats "重装alpine" + send_stats "アルパインを再インストールする" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4738,7 +4738,7 @@ dd_xitong() { ;; 32) - send_stats "重装arch" + send_stats "アーチを再インストールする" dd_xitong_3 bash reinstall.sh arch reboot @@ -4746,7 +4746,7 @@ dd_xitong() { ;; 33) - send_stats "重装kali" + send_stats "kaliを再インストールする" dd_xitong_3 bash reinstall.sh kali reboot @@ -4754,7 +4754,7 @@ dd_xitong() { ;; 34) - send_stats "重装openeuler" + send_stats "オープニューラーを再インストールする" dd_xitong_3 bash reinstall.sh openeuler 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 "重装windows10" + send_stats "Windows 10を再インストールする" 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 @@ -4802,7 +4802,7 @@ dd_xitong() { ;; 44) - send_stats "重装windows server 25" + send_stats "Windowsサーバー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 "Windowsサーバー22を再インストールします" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" 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 @@ -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 @@ -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 "------------------------" - 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) @@ -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内核开启BBR3" + echo "Debian/Ubuntu のみをサポートします" + 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+') @@ -4949,17 +4949,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 +4968,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 } @@ -5009,37 +5009,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 "------------------------" - 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 "Red Hat カーネルをアンインストールする" server_reboot ;; @@ -5052,26 +5052,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 "続行してもよろしいですか? (はい/いいえ):" 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 @@ -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 \ @@ -5092,19 +5092,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 +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 \ @@ -5122,8 +5122,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}" } @@ -5135,23 +5135,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 @@ -5160,7 +5160,7 @@ clamav() { ;; 2) - send_stats "重要目录扫描" + send_stats "重要なディレクトリのスキャン" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5168,8 +5168,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 +5186,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 +5212,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 @@ -5253,36 +5253,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 @@ -5294,37 +5294,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 } -# 网站搭建优化函数 +# Webサイト構築最適化機能 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 +5336,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 @@ -5356,62 +5356,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 サイト最適化モード: 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 @@ -5438,7 +5438,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 @@ -5447,17 +5447,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 } @@ -5467,29 +5467,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 +5511,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 +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}#" @@ -5535,9 +5535,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 +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 "启用后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 +5615,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 +5623,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 ;; *) @@ -5650,23 +5650,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 "- Enter キーを押して、デフォルトのディレクトリ (/etc /usr /home) を使用します。" + read -r -p "バックアップするディレクトリを入力してください (複数のディレクトリをスペースで区切って、Enter キーを押してデフォルトのディレクトリを使用します)。" input - # 如果用户没有输入目录,则使用默认目录 + # ユーザーがディレクトリを入力しない場合は、デフォルトのディレクトリが使用されます。 if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5674,119 +5674,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 } @@ -5798,56 +5798,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 "キーの内容を貼り付けてください (貼り付け後に 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" @@ -5856,89 +5856,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 @@ -5950,21 +5950,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 } @@ -5980,156 +5980,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 ;; @@ -6138,64 +6138,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 "- リモートディレクトリ: /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 "キーの内容を貼り付けてください (貼り付け後に 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 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,63 +6203,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 @@ -6270,51 +6270,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 @@ -6322,32 +6322,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="" @@ -6355,66 +6355,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 ;; @@ -6423,9 +6423,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "无效的选择,请重试。" ;; + *) echo "選択が無効です。もう一度お試しください。" ;; esac - read -e -p "按回车键继续..." + read -e -p "Enter を押して続行します..." done } @@ -6440,7 +6440,7 @@ rsync_manager() { linux_info() { clear - send_stats "系统信息查询" + send_stats "システム情報の問い合わせ" ip_address @@ -6490,41 +6490,41 @@ 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" - 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 @@ -6537,111 +6537,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通信接続ツール" + 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}レンジャーファイル管理ツール" + 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 "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 @@ -6658,7 +6658,7 @@ linux_tools() { clear ranger cd ~ - send_stats "安装ranger" + send_stats "レンジャーをインストールする" ;; 13) clear @@ -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 @@ -6694,7 +6694,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "安装nano" + send_stats "ナノをインストールする" ;; @@ -6705,7 +6705,7 @@ linux_tools() { clear git --help cd ~ - send_stats "安装git" + send_stats "gitをインストールする" ;; 21) @@ -6713,67 +6713,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 "ニンベーダーをインストールする" ;; 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 "インストールされているツール名 (wgetcurlsudohtop) を入力してください:" 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) @@ -6781,7 +6781,7 @@ linux_tools() { ;; *) - echo "无效的输入!" + echo "無効な入力です!" ;; esac break_end @@ -6795,27 +6795,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 "アルパインがBBR3をオープン" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6857,21 +6857,21 @@ docker_ssh_migration() { list_backups() { local BACKUP_ROOT="/tmp" - 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 -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,28 +6892,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}検出されました$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 目录,请手动输入路径: " project_dir + read -e -p "作成ディレクトリが検出されません。パスを手動で入力してください。" 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 @@ -6921,137 +6921,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 復元:$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 -e -p "请输入要还原的备份目录: " BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + send_stats "Docker の復元" + 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 项目 --------- + # --------- 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}Compose 项目 [$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" - 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 @@ -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 @@ -7095,68 +7095,68 @@ 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 "移行するバックアップ ディレクトリを入力してください:" 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" - 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; } + 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}" } # ---------------------------- - # 主菜单 + # メインメニュー # ---------------------------- 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 -e -p "请选择: " choice + read -e -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 @@ -7173,38 +7173,38 @@ linux_docker() { while true; do clear - # send_stats "docker管理" + # 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}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 ;; @@ -7215,22 +7215,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 のバージョン" 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 "" @@ -7245,8 +7245,8 @@ linux_docker() { 5) while true; do clear - send_stats "Docker网络管理" - echo "Docker网络列表" + send_stats "Dockerネットワーク管理" + echo "Dockerネットワークリスト" echo "------------------------------------------------------------" docker network ls echo "" @@ -7270,36 +7270,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 @@ -7308,8 +7308,8 @@ linux_docker() { ;; 4) - send_stats "删除网络" - read -e -p "请输入要删除的网络名: " dockernetwork + send_stats "ネットワークを削除する" + read -e -p "削除するネットワーク名を入力してください:" dockernetwork docker network rm $dockernetwork ;; @@ -7323,29 +7323,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 @@ -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]) @@ -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,13 +7385,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) ;; @@ -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,151 +7462,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}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 三网回程延迟路由测试" - 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 トリプルネットワークバックホール回線テスト" + 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}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}ベンチパフォーマンステスト" + 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 "Yeawu ストリーミング メディアのロック解除の検出" 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 "超高速トリプルネットワーク速度テスト" 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 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 "icu/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 ;; @@ -7616,7 +7616,7 @@ linux_test() { ;; *) - echo "无效的输入!" + echo "無効な入力です!" ;; esac break_end @@ -7632,51 +7632,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}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 "インストールしてもよろしいですか? (はい/いいえ):" 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 "请输入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" \ @@ -7684,14 +7684,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 ;; @@ -7699,20 +7699,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 "続行してもよろしいですか? (はい/いいえ):" 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,28 +7724,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 - 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) @@ -7756,15 +7756,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 +7785,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 +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 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}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 軽量ブログ 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 ブログ サイトをインストールする" + 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 +7872,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 +7898,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 +7934,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 + # AppleCMS webname="苹果CMS" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "導入を開始する$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7973,24 +7973,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 +8011,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 "ユーザー名: 管理者" + 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 @@ -8075,12 +8075,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 +8088,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 +8113,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 +8126,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 +8152,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 +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 "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "現在、zip 形式のソース コード パッケージのみをアップロードできます。ソースコードパッケージを/home/web/html/に置いてください。${yuming}ディレクトリの下" + read -e -p "ダウンロード リンクを入力して、ソース コード パッケージをリモートでダウンロードすることもできます。 Enter を直接押して、リモート ダウンロードをスキップします。" url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8193,20 +8193,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 @@ -8217,15 +8217,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 +8235,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 で終わる圧縮パッケージである必要があります。 Pagoda/1panel バックアップ データのインポートをサポートするには、/home/ ディレクトリに配置してください。" + read -e -p "ダウンロード リンクを入力してバックアップ データをリモートでダウンロードすることもできます。 Enter を直接押して、リモート ダウンロードをスキップします。" url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -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 @@ -8278,12 +8278,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 +8296,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 +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" @@ -8332,11 +8332,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 +8356,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 +8379,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 +8397,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 +8431,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 +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 "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "現在、zip 形式のソース コード パッケージのみをアップロードできます。ソースコードパッケージを/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 "请输入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 @@ -8492,23 +8492,23 @@ 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 "バックアップ データをリモート サーバーに転送しますか? (はい/いいえ):" 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 /home/*.tar.gz | head -1) @@ -8516,9 +8516,9 @@ 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 "文件已传送至远程服务器home目录。" + echo "ファイルはリモート サーバーのホーム ディレクトリに転送されました。" else - echo "未找到要传送的文件。" + echo "転送するファイルが見つかりませんでした。" fi break ;; @@ -8526,7 +8526,7 @@ linux_ldnmp() { break ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "選択が無効です。Y または N を入力してください。" ;; esac done @@ -8534,9 +8534,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 @@ -8546,18 +8546,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 ;; *) @@ -8571,19 +8571,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 "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 @@ -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 ;; @@ -8620,11 +8620,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,13 +8644,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 @@ -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/ @@ -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" - 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) (Enter キーを押して最新バージョンを取得します):" version local version=${version:-8.3} cd /home/web/ cp /home/web/docker-compose.yml /home/web/docker-compose1.yml @@ -8709,8 +8709,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 +8721,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 @@ -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]) @@ -8769,7 +8769,7 @@ linux_ldnmp() { ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "選択が無効です。Y または N を入力してください。" ;; esac ;; @@ -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..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8813,71 +8813,71 @@ 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 リモート デスクトップ 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}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}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}メモウェブメモ${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}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}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}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}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主机建站管理面板" - 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}ディープシークチャット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ツールツールボックス" + 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}------------------------" - 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}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个人财务管理工具" - 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}イミッチピクチャービデオマネージャー${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}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}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}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 @@ -9030,8 +9030,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,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "搭建哪吒" + send_stats "ネザを構築する" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,20 +9073,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 "ネザモニタリング$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 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) @@ -9143,7 +9143,7 @@ while true; do ;; 9|mail) - send_stats "搭建邮局" + send_stats "郵便局を建てる" clear install telnet local app_id="9" @@ -9153,44 +9153,44 @@ 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}}' 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 + 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" @@ -9200,7 +9200,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "按任意键继续..." + echo "続行するには任意のキーを押してください..." read -n 1 -s -r -p "" install jq @@ -9219,9 +9219,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 "" @@ -9244,9 +9244,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 "" ;; @@ -9257,7 +9257,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "アプリがアンインストールされました" ;; *) @@ -9291,7 +9291,7 @@ while true; do clear ip_address - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -9301,7 +9301,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 } @@ -9311,7 +9311,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "应用已卸载" + echo "アプリがアンインストールされました" } docker_app_plus @@ -9395,7 +9395,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -9409,7 +9409,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 @@ -9554,7 +9554,7 @@ while true; do ;; 19|safeline) - send_stats "搭建雷池" + send_stats "雷のプールを作る" local app_id="19" local docker_name=safeline-mgt @@ -9562,20 +9562,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 "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 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) @@ -9585,7 +9585,7 @@ while true; do add_app_id clear - echo "雷池WAF面板已经安装完成" + echo "Leichi WAFパネルを導入しました" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9598,7 +9598,7 @@ while true; do add_app_id clear - echo "雷池WAF面板已经更新完成" + echo "Leichi WAF パネルが更新されました" check_docker_app_ip ;; 3) @@ -9609,7 +9609,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" ;; *) @@ -9728,8 +9728,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 \ @@ -10017,7 +10017,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" @@ -10070,7 +10070,7 @@ while true; do ;; 38|xiaoya) - send_stats "小雅全家桶" + send_stats "シャオヤファミリーバケツ" clear install_docker check_disk_space 1 @@ -10274,9 +10274,9 @@ while true; do prometheus_install clear ip_address - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip - echo "初始用户名密码均为: admin" + echo "初期のユーザー名とパスワードは次のとおりです: admin" } docker_app_update() { @@ -10294,7 +10294,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "应用已卸载" + echo "アプリがアンインストールされました" } docker_app_plus @@ -10381,7 +10381,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 ;; @@ -10501,7 +10501,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -10516,7 +10516,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 @@ -10544,7 +10544,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -10559,7 +10559,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -10567,7 +10567,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 @@ -10588,17 +10588,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 "アプリが更新されました" } @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "应用已卸载" + echo "アプリがアンインストールされました" } docker_app_plus @@ -10655,7 +10655,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 } @@ -10671,7 +10671,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 @@ -10933,7 +10933,7 @@ while true; do docker_rum() { - read -e -p "设置LibreTV的登录密码: " app_passwd + read -e -p "LibreTV のログイン パスワードを設定します。" app_passwd docker run -d \ --name libretv \ @@ -10967,9 +10967,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 @@ -10985,7 +10985,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -10999,7 +10999,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 @@ -11072,8 +11072,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 \ @@ -11170,11 +11170,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) @@ -11183,17 +11183,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 } @@ -11203,7 +11203,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11288,7 +11288,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 \ @@ -11392,7 +11392,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -11405,7 +11405,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 @@ -11566,7 +11566,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 @@ -11618,7 +11618,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -11632,7 +11632,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 @@ -11707,8 +11707,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} \ @@ -11756,7 +11756,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -11770,7 +11770,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 @@ -11810,7 +11810,7 @@ while true; do block_container_port "$docker_name" "$ipv4_address" clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -11824,7 +11824,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 @@ -11842,9 +11842,9 @@ 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 + read -e -p "WireGuard ネットワーク セグメントを入力してください (デフォルトは 10.13.13.0)。" NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11914,18 +11914,18 @@ while true; do sleep 2 echo - echo -e "${gl_huang}所有客户端二维码配置: ${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的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 をダウンロードし、上の 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 } @@ -11953,16 +11953,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 - # 逐行读取用户输入 + # ユーザー入力を 1 行ずつ読み取ります while IFS= read -r line; do if [[ -z "$line" ]]; then ((empty_line_count++)) @@ -11975,10 +11975,10 @@ while true; do fi done - # 写入配置文件 + # 設定ファイルの書き込み echo "$input" > "$CONFIG_FILE" - echo "客户端配置已保存到 $CONFIG_FILE" + echo "クライアント設定の保存場所$CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12023,10 +12023,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 @@ -12043,7 +12043,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -12057,7 +12057,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 @@ -12097,24 +12097,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" - read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice + echo "バックアップファイルが作成されました: /$backup_filename" + read -e -p "バックアップ データをリモート サーバーに転送しますか? (はい/いいえ):" 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) @@ -12122,14 +12122,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项目,不包含宝塔,1panel等建站面板的数据备份。" + echo "注: 現在のバックアップには Docker プロジェクトのみが含まれており、Pagoda や 1panel などの Web サイト構築パネルのデータ バックアップは含まれていません。" break ;; esac @@ -12139,29 +12139,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 "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 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 ;; @@ -12184,35 +12184,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}ワークスペース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 @@ -12220,7 +12220,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースの開始$SESSION_NAME" tmux_run ;; @@ -12228,63 +12228,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 ;; @@ -12296,21 +12296,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 ;; @@ -12326,29 +12326,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 @@ -12373,54 +12373,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}ネイティブホスト解像度${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}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}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 + 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 @@ -12428,34 +12428,34 @@ linux_Settings() { 2) clear - send_stats "设置你的登录密码" - echo "设置你的登录密码" + send_stats "ログインパスワードを設定する" + echo "ログインパスワードを設定する" passwd ;; 3) root_use - send_stats "root密码模式" + 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版本号(输入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 @@ -12488,7 +12488,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 @@ -12517,55 +12517,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 @@ -12584,8 +12584,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 @@ -12600,51 +12600,51 @@ 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 "------------------------" 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 "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 优先" + 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修复" + echo "この機能は jhb によって提供されています。ありがとう!" + send_stats "IPv6修復" ;; *) @@ -12662,43 +12662,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 "カスタム仮想メモリセット" ;; *) @@ -12711,8 +12711,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 @@ -12723,62 +12723,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" ;; @@ -12791,50 +12791,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 "" @@ -12842,46 +12842,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. 米国西部時間 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 @@ -12924,21 +12924,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 @@ -12956,11 +12956,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 @@ -12968,32 +12968,32 @@ EOF 19) root_use - send_stats "换系统更新源" + send_stats "システムアップデートソースを変更する" clear - echo "选择更新源区域" - echo "接入LinuxMirrors切换系统更新源" + echo "更新元リージョンの選択" + echo "LinuxMirror にアクセスしてシステム アップデート ソースを切り替える" 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 @@ -13001,62 +13001,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 # 跳出循环,退出菜单 @@ -13068,32 +13068,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 # 跳出循环,退出菜单 @@ -13104,24 +13104,24 @@ EOF 22) root_use - send_stats "ssh防御" + 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 -e "SSH防御プログラム$check_f2b_status" + echo "failed2ban はブルート フォース クラッキングを防ぐ 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) f2b_install_sshd @@ -13143,7 +13143,7 @@ EOF 9) remove fail2ban rm -rf /etc/fail2ban - echo "Fail2Ban防御程序已卸载" + echo "Fail2Ban 防御プログラムがアンインストールされました" break ;; *) @@ -13156,47 +13156,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 的值 + # しきい値_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 ~ @@ -13209,15 +13209,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 @@ -13230,40 +13230,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 @@ -13279,18 +13279,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 "続行してもよろしいですか? (はい/いいえ):" choice case "$choice" in [Yy]) - send_stats "电报预警启用" + send_stats "テレグラム警告が有効になっています" cd ~ install nano tmux bc jq check_crontab_installed @@ -13312,7 +13312,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 @@ -13323,21 +13323,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 @@ -13381,7 +13381,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; } @@ -13404,62 +13404,62 @@ EOF 41) clear - send_stats "留言板" - echo "访问科技lion官方留言板,您对脚本有任何想法欢迎留言交流!" + send_stats "掲示板" + echo "Technology Lion の公式掲示板をご覧ください。脚本についてのアイデアがあれば、メッセージを残して交換してください。" echo "https://board.kejilion.pro" - echo "公共密码: kejilion.sh" + echo "公開パスワード: kejilion.sh" ;; 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 "ワンクリックメンテナンスを実行してもよろしいですか? (はい/いいえ):" 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) @@ -13476,25 +13476,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 @@ -13502,7 +13502,7 @@ EOF 99) clear - send_stats "重启系统" + send_stats "システムを再起動します" server_reboot ;; 100) @@ -13518,32 +13518,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 @@ -13559,11 +13559,11 @@ EOF 102) clear - send_stats "卸载科技lion脚本" - echo "卸载科技lion脚本" + 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]) @@ -13571,16 +13571,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 ;; @@ -13590,7 +13590,7 @@ EOF ;; *) - echo "无效的输入!" + echo "無効な入力です!" ;; esac break_end @@ -13608,187 +13608,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. ファイル ディレクトリの解凍 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 "リモート サーバーのユーザー名 (デフォルトの 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 @@ -14086,15 +14086,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 ;; *) @@ -14116,41 +14116,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スクリプト・コレクション" +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}Eudemons Parlu サーバー開始スクリプト" 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_info ;; - 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 ;; @@ -14161,13 +14161,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "幻兽帕鲁开服脚本" ; 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 @@ -14175,70 +14175,70 @@ 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" -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 "显示系统信息 k info" +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 "クリーン系ジャンククリーン |きれいだ" +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 "rsync リモート同期ツール k rsync | k リモート同期" +echo "ハードディスク管理ツール k ディスク | k ハードディスクの管理" +echo "イントラネット普及率 (サーバー) k frps" +echo "イントラネット浸透率 (クライアント) k frpc" +echo "ソフトウェア起動 k start sshd | 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 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 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 ロード バランシング |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 お気に入り | k コマンドのお気に入り" +echo "アプリケーションマーケット管理kアプリ" +echo "申請番号の迅速な管理 k app 26 | kアプリ1パネル | k アプリ npm" +echo "システム情報を表示 k info" } 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|更新) @@ -14272,7 +14272,7 @@ else rsync_run) shift - send_stats "定时rsync同步" + send_stats "スケジュールされたrsync同期" run_task "$@" ;; @@ -14291,7 +14291,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" @@ -14304,13 +14304,13 @@ else swap) shift - send_stats "快速设置虚拟内存" + send_stats "仮想メモリをすばやくセットアップする" add_swap "$@" ;; time|时区) shift - send_stats "快速设置时区" + send_stats "タイムゾーンを素早く設定" set_timedate "$@" ;; @@ -14358,42 +14358,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 @@ -14403,15 +14403,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 ;; *) @@ -14438,7 +14438,7 @@ else app) shift - send_stats "应用$@" + send_stats "申し込む$@" linux_panel "$@" ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index b3957f8b5..17dde6600 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -57,7 +57,7 @@ CheckFirstRun_true() { -# 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! +# 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기기 국가 및 기능 이름을 기록하는 기능입니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. # send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. @@ -953,12 +953,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() { @@ -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" ;; @@ -1291,7 +1291,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 가상 메모리를 만들어야 하는지 확인 +# 가상 메모리를 만들어야 하는지 결정 [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -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 @@ -1524,8 +1524,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. 국내 등록 제한 ➠ 중국 ​​본토 환경의 경우 도메인 이름 등록 여부를 확인하시기 바랍니다." @@ -1998,7 +1998,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 방어 끄기" @@ -2112,7 +2112,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 +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) - # 획득한 시간을 확인하세요. + # 획득한 시간을 확인 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) @@ -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 @@ -2656,7 +2656,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 @@ -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 @@ -3185,16 +3185,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" } @@ -3620,7 +3620,7 @@ EOF donlond_frp frps - # 생성된 정보를 출력 + # 생성된 정보 출력 ip_address echo "------------------------" echo "클라이언트 배포에 필요한 매개변수" @@ -3665,7 +3665,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} @@ -3682,7 +3682,7 @@ remote_port = ${remote_port} EOF - # 생성된 정보를 출력 + # 생성된 정보 출력 echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." docker restart frpc @@ -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" ;; @@ -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 ;; @@ -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 @@ -5038,7 +5038,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 @@ -5056,7 +5056,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 @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "웹사이트 최적화 모드" + send_stats "웹사이트 최적화 모델" ;; 4) cd ~ @@ -5598,7 +5598,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 "------------------------" @@ -5837,7 +5837,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 @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "하드디스크 관리 기능" while true; do clear - echo "하드 디스크 파티션 관리" + echo "하드 드라이브 파티션 관리" echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions @@ -6185,7 +6185,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 @@ -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 @@ -6571,7 +6571,7 @@ linux_tools() { clear echo "도구가 설치되었으며 다음과 같이 사용됩니다." curl --help - send_stats "安装curl" + send_stats "컬 설치" ;; 2) clear @@ -6579,69 +6579,69 @@ linux_tools() { clear 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) @@ -6649,7 +6649,7 @@ linux_tools() { install btop clear btop - send_stats "安装btop" + send_stats "btop 설치" ;; 12) clear @@ -6658,7 +6658,7 @@ linux_tools() { clear ranger cd ~ - send_stats "安装ranger" + send_stats "레인저 설치" ;; 13) clear @@ -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 @@ -6694,7 +6694,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "安装nano" + send_stats "나노 설치" ;; @@ -6705,7 +6705,7 @@ linux_tools() { clear git --help cd ~ - send_stats "安装git" + send_stats "자식 설치" ;; 21) @@ -6713,67 +6713,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 "닌베이더 설치" ;; 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 컬 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) @@ -6781,7 +6781,7 @@ linux_tools() { ;; *) - echo "无效的输入!" + echo "입력이 잘못되었습니다!" ;; esac break_end @@ -6795,27 +6795,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 @@ -6857,21 +6857,21 @@ docker_ssh_migration() { list_backups() { local BACKUP_ROOT="/tmp" - 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 -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,28 +6892,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도커 작성 컨테이너입니다${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 项目已经打包过,跳过 + # Compose 프로젝트가 이미 패키징된 경우 건너뛰세요. if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}Compose 项目 [$project_name] 已备份过,跳过重复打包...${NC}" + echo -e "${YELLOW}프로젝트 작성 [$project_name] 이미 백업되어 있으니 반복 패키징은 건너뛰세요...${NC}" continue fi @@ -6921,137 +6921,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 복원:$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 -e -p "请输入要还原的备份目录: " BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + send_stats "도커 복원" + 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 项目 --------- + # --------- 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 项目的容器是否已经在运行 + # 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 -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" - 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 @@ -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 @@ -7095,68 +7095,68 @@ docker_ssh_migration() { # ---------------------------- - # 迁移 + # 이주하다 # ---------------------------- migrate_docker() { - send_stats "Docker迁移" + send_stats "도커 마이그레이션" 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 - 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" - 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; } + 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}" } # ---------------------------- - # 主菜单 + # 메인 메뉴 # ---------------------------- 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. 도커 프로젝트 백업" + echo -e "2. 도커 프로젝트 마이그레이션" + 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 ;; 3) restore_docker ;; 4) delete_backup ;; 0) return ;; - *) echo -e "${RED}无效选项${NC}" ;; + *) echo -e "${RED}잘못된 옵션${NC}" ;; esac break_end done @@ -7173,38 +7173,38 @@ linux_docker() { while true; do clear - # send_stats "docker管理" - echo -e "Docker管理" + # 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全局状态 ${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}도커 컨테이너 관리${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 "도커 환경 설치" install_add_docker ;; @@ -7215,22 +7215,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 "Docker 볼륨:${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 "" @@ -7245,8 +7245,8 @@ linux_docker() { 5) while true; do clear - send_stats "Docker网络管理" - echo "Docker网络列表" + send_stats "도커 네트워크 관리" + echo "도커 네트워크 목록" echo "------------------------------------------------------------" docker network ls echo "" @@ -7270,36 +7270,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 @@ -7308,8 +7308,8 @@ linux_docker() { ;; 4) - send_stats "删除网络" - read -e -p "请输入要删除的网络名: " dockernetwork + send_stats "네트워크 삭제" + read -e -p "삭제할 네트워크 이름을 입력하세요:" dockernetwork docker network rm $dockernetwork ;; @@ -7323,29 +7323,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 @@ -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]) @@ -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 "도커 정리" read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7385,13 +7385,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) ;; @@ -7407,13 +7407,13 @@ linux_docker() { 11) clear - send_stats "Docker v6 开" + send_stats "도커 v6 켜짐" docker_ipv6_on ;; 12) clear - send_stats "Docker v6 关" + send_stats "도커 v6 닫기" docker_ipv6_off ;; @@ -7424,7 +7424,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]) @@ -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,151 +7462,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}예우 스트리밍 미디어 잠금 해제 감지" + 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 삼중 네트워크 백홀 회선 테스트" + 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 세 개의 네트워크 라인 테스트" + 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}벤치 성능 테스트" + 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 "예우 스트리밍 미디어 잠금 해제 감지" 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 "초고속 트리플 네트워크 속도 테스트" 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 "벤치 성능 테스트" 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 @@ -7632,51 +7632,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}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 "정말로 설치하시겠습니까? (예/아니요):" 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 "请输入Speedtest间隔时间(秒) [默认: $DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval + read -e -p "속도 테스트 간격 시간(초)을 입력하십시오. [기본값:$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" \ @@ -7684,14 +7684,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 ;; @@ -7699,20 +7699,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 "계속하시겠습니까? (예/아니요):" 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) @@ -7724,28 +7724,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 - 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) @@ -7756,15 +7756,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 +7785,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 +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}安装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}워드프레스 설치${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 포럼 웹사이트 설치${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 +7872,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 +7898,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 +7934,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 "레디스 호스트: 레디스" ;; 5) clear - # 苹果CMS + # AppleCMS webname="苹果CMS" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포 시작$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7973,24 +7973,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 +8011,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 "레디스 주소: 레디스" + echo "redis 비밀번호: 기본적으로 입력되지 않음" + echo "레디스 포트: 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论坛 + # 플라럼 포럼 webname="flarum论坛" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포 시작$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8075,12 +8075,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 +8088,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 +8113,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 +8126,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 +8152,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 +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 "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "현재는 zip 형식의 소스 코드 패키지만 업로드할 수 있습니다. 소스 코드 패키지를 /home/web/html/에 넣어주세요.${yuming}디렉토리 아래" + read -e -p "다운로드 링크를 입력하여 소스 코드 패키지를 원격으로 다운로드할 수도 있습니다. 원격 다운로드를 건너뛰려면 Enter를 직접 누르세요." url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8193,20 +8193,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 @@ -8217,15 +8217,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 +8235,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로 끝나는 압축 패키지여야 합니다. Pagoda/1panel 백업 데이터 가져오기를 지원하려면 /home/ 디렉토리에 넣으십시오." + read -e -p "다운로드 링크를 입력하여 원격으로 백업 데이터를 다운로드할 수도 있습니다. 원격 다운로드를 건너뛰려면 Enter를 직접 누르세요." url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -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 @@ -8278,12 +8278,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 +8296,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 +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" @@ -8332,11 +8332,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 +8356,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 +8379,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 +8397,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 +8431,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 +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 "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "현재는 zip 형식의 소스 코드 패키지만 업로드할 수 있습니다. 소스 코드 패키지를 /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 "请输入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 @@ -8492,23 +8492,23 @@ 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 "백업 데이터를 원격 서버로 전송하시겠습니까? (예/아니요):" 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 /home/*.tar.gz | head -1) @@ -8516,9 +8516,9 @@ 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 "文件已传送至远程服务器home目录。" + echo "파일이 원격 서버 홈 디렉터리로 전송되었습니다." else - echo "未找到要传送的文件。" + echo "전송할 파일을 찾을 수 없습니다." fi break ;; @@ -8526,7 +8526,7 @@ linux_ldnmp() { break ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac done @@ -8534,9 +8534,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 @@ -8546,18 +8546,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 ;; *) @@ -8571,19 +8571,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 "최신 백업을 복원하려면 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 @@ -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 ;; @@ -8620,11 +8620,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,13 +8644,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 @@ -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/ @@ -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" - 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)(최신 버전을 얻으려면 Enter 키를 누르세요):" version local version=${version:-8.3} cd /home/web/ cp /home/web/docker-compose.yml /home/web/docker-compose1.yml @@ -8709,8 +8709,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 +8721,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 @@ -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]) @@ -8769,7 +8769,7 @@ linux_ldnmp() { ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac ;; @@ -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..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8813,71 +8813,71 @@ 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 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}禅道项目管理软件 ${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}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}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-오늘 예약된 작업 관리 프레임워크" + 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 패널 탐색 패널${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}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}도커 가속 스테이션${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}라마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}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}비트워드 비밀번호 관리자${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}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}코마리 서버 모니터링 도구${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}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}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}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 @@ -9030,8 +9030,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,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "搭建哪吒" + send_stats "네자 빌드" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,20 +9073,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 "나타 모니터링$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 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) @@ -9143,7 +9143,7 @@ while true; do ;; 9|mail) - send_stats "搭建邮局" + send_stats "우체국을 짓다" clear install telnet local app_id="9" @@ -9153,44 +9153,44 @@ 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}}' 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 + 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" @@ -9200,7 +9200,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "按任意键继续..." + echo "계속하려면 아무 키나 누르세요..." read -n 1 -s -r -p "" install jq @@ -9219,9 +9219,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 "" @@ -9244,9 +9244,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 "" ;; @@ -9257,7 +9257,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "앱이 제거되었습니다." ;; *) @@ -9291,7 +9291,7 @@ while true; do clear ip_address - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -9301,7 +9301,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 } @@ -9311,7 +9311,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "应用已卸载" + echo "앱이 제거되었습니다." } docker_app_plus @@ -9395,7 +9395,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -9409,7 +9409,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 @@ -9554,7 +9554,7 @@ while true; do ;; 19|safeline) - send_stats "搭建雷池" + send_stats "천둥 웅덩이를 만들어라" local app_id="19" local docker_name=safeline-mgt @@ -9562,20 +9562,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 "레이치(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 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) @@ -9585,7 +9585,7 @@ while true; do add_app_id clear - echo "雷池WAF面板已经安装完成" + echo "Leichi WAF 패널이 설치되었습니다." check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9598,7 +9598,7 @@ while true; do add_app_id clear - echo "雷池WAF面板已经更新完成" + echo "Leichi WAF 패널이 업데이트되었습니다." check_docker_app_ip ;; 3) @@ -9609,7 +9609,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" ;; *) @@ -9728,8 +9728,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 \ @@ -10017,7 +10017,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" @@ -10070,7 +10070,7 @@ while true; do ;; 38|xiaoya) - send_stats "小雅全家桶" + send_stats "Xiaoya 가족 버킷" clear install_docker check_disk_space 1 @@ -10274,9 +10274,9 @@ while true; do prometheus_install clear ip_address - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip - echo "初始用户名密码均为: admin" + echo "초기 사용자 이름과 비밀번호는 admin입니다." } docker_app_update() { @@ -10294,7 +10294,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "应用已卸载" + echo "앱이 제거되었습니다." } docker_app_plus @@ -10381,7 +10381,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 ;; @@ -10501,7 +10501,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -10516,7 +10516,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 @@ -10544,7 +10544,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -10559,7 +10559,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -10567,7 +10567,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 @@ -10588,17 +10588,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 "앱이 업데이트되었습니다" } @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "应用已卸载" + echo "앱이 제거되었습니다." } docker_app_plus @@ -10655,7 +10655,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 } @@ -10671,7 +10671,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 @@ -10933,7 +10933,7 @@ while true; do docker_rum() { - read -e -p "设置LibreTV的登录密码: " app_passwd + read -e -p "LibreTV 로그인 비밀번호 설정:" app_passwd docker run -d \ --name libretv \ @@ -10967,9 +10967,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 @@ -10985,7 +10985,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -10999,7 +10999,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 @@ -11072,8 +11072,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 \ @@ -11170,11 +11170,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) @@ -11183,17 +11183,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 } @@ -11203,7 +11203,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11288,7 +11288,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 \ @@ -11392,7 +11392,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -11405,7 +11405,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 @@ -11566,7 +11566,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 @@ -11618,7 +11618,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -11632,7 +11632,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 @@ -11707,8 +11707,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} \ @@ -11756,7 +11756,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -11770,7 +11770,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 @@ -11810,7 +11810,7 @@ while true; do block_container_port "$docker_name" "$ipv4_address" clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -11824,7 +11824,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 @@ -11842,9 +11842,9 @@ 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 + read -e -p "WireGuard 네트워크 세그먼트(기본값 10.13.13.0)를 입력하세요." NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11914,18 +11914,18 @@ while true; do sleep 2 echo - echo -e "${gl_huang}所有客户端二维码配置: ${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的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을 다운로드하고 위의 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 } @@ -11953,16 +11953,16 @@ while true; do local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" - # 创建目录(如果不存在) + # 디렉터리가 없으면 생성 mkdir -p "$(dirname "$CONFIG_FILE")" - echo "请粘贴你的客户端配置,连续按两次回车保存:" + echo "클라이언트 구성을 붙여넣고 Enter를 두 번 눌러 저장하세요." - # 初始化变量 + # 변수 초기화 input="" empty_line_count=0 - # 逐行读取用户输入 + # 사용자 입력을 한 줄씩 읽습니다. while IFS= read -r line; do if [[ -z "$line" ]]; then ((empty_line_count++)) @@ -11975,10 +11975,10 @@ while true; do fi done - # 写入配置文件 + # 구성 파일 쓰기 echo "$input" > "$CONFIG_FILE" - echo "客户端配置已保存到 $CONFIG_FILE" + echo "클라이언트 구성이 다음에 저장되었습니다.$CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12023,10 +12023,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 @@ -12043,7 +12043,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -12057,7 +12057,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 @@ -12097,24 +12097,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" - read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice + echo "생성된 백업 파일: /$backup_filename" + read -e -p "백업 데이터를 원격 서버로 전송하시겠습니까? (예/아니요):" 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) @@ -12122,14 +12122,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项目,不包含宝塔,1panel等建站面板的数据备份。" + echo "참고: 현재 백업에는 docker 프로젝트만 포함되며, Pagoda, 1panel 등 웹사이트 구축 패널의 데이터 백업은 포함되지 않습니다." break ;; esac @@ -12139,29 +12139,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 "최신 백업을 복원하려면 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 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 ;; @@ -12184,35 +12184,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 @@ -12220,7 +12220,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업공간 시작$SESSION_NAME" tmux_run ;; @@ -12228,63 +12228,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 ;; @@ -12296,21 +12296,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 ;; @@ -12326,29 +12326,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 "다음과 같이 백그라운드에서 실행하려는 명령을 입력하십시오. 컬 -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 @@ -12373,54 +12373,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}기본 호스트 확인${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}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 @@ -12428,34 +12428,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 "현재 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 @@ -12488,7 +12488,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 @@ -12517,55 +12517,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 @@ -12584,8 +12584,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 @@ -12600,51 +12600,51 @@ 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 "------------------------" 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 "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 优先" + 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修复" + echo "이 기능은 jhb에서 제공합니다. 감사합니다!" + send_stats "IPv6 수리" ;; *) @@ -12662,43 +12662,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 "사용자 정의 가상 메모리 세트" ;; *) @@ -12711,8 +12711,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 @@ -12723,62 +12723,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" ;; @@ -12791,50 +12791,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 "" @@ -12842,46 +12842,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. 미국 서부 시간 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 @@ -12924,21 +12924,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 @@ -12956,11 +12956,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 @@ -12968,32 +12968,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 @@ -13001,62 +13001,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 # 跳出循环,退出菜单 @@ -13068,32 +13068,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 # 跳出循环,退出菜单 @@ -13104,24 +13104,24 @@ EOF 22) root_use - send_stats "ssh防御" + 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 -e "SSH 방어 프로그램$check_f2b_status" + echo "fall2ban은 무차별 대입 크래킹을 방지하는 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) f2b_install_sshd @@ -13143,7 +13143,7 @@ EOF 9) remove fail2ban rm -rf /etc/fail2ban - echo "Fail2Ban防御程序已卸载" + echo "Fail2Ban 방어 프로그램이 제거되었습니다." break ;; *) @@ -13156,47 +13156,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 ~ @@ -13209,15 +13209,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 @@ -13230,40 +13230,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 @@ -13279,18 +13279,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 로봇 API 및 사용자 ID를 구성해야 합니다." + 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 @@ -13312,7 +13312,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 @@ -13323,21 +13323,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 @@ -13381,7 +13381,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; } @@ -13404,62 +13404,62 @@ EOF 41) clear - send_stats "留言板" - echo "访问科技lion官方留言板,您对脚本有任何想法欢迎留言交流!" + send_stats "메시지 보드" + echo "Technology Lion 공식 게시판을 방문해 보세요. 스크립트에 대한 아이디어가 있으시면 교환 메시지를 남겨주세요!" echo "https://board.kejilion.pro" - echo "公共密码: kejilion.sh" + echo "공개 비밀번호: kejilion.sh" ;; 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 "원클릭 유지 관리를 원하시나요? (예/아니요):" 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) @@ -13476,25 +13476,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 @@ -13502,7 +13502,7 @@ EOF 99) clear - send_stats "重启系统" + send_stats "시스템을 다시 시작하세요" server_reboot ;; 100) @@ -13518,32 +13518,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 @@ -13559,11 +13559,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 "계속하시겠습니까? (예/아니요):" choice case "$choice" in [Yy]) @@ -13571,16 +13571,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 ;; @@ -13590,7 +13590,7 @@ EOF ;; *) - echo "无效的输入!" + echo "입력이 잘못되었습니다!" ;; esac break_end @@ -13608,187 +13608,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. 파일 디렉터리 압축 풀기 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 @@ -14086,15 +14086,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 ;; *) @@ -14116,41 +14116,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}Eudemons Parlu 서버 오픈 스크립트" 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_info ;; - 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 ;; @@ -14161,13 +14161,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "幻兽帕鲁开服脚本" ; 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 @@ -14175,70 +14175,70 @@ 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" -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 "显示系统信息 k info" +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 제거 nano wget | k 델 나노 wget | k 나노 wget 제거 | k 나노 wget 제거" +echo "시스템 k 업데이트 업데이트 | 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 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 "도커 관리 플레인 k 도커" +echo "docker 환경 설치 k docker 설치 |k docker 설치" +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 "역방향 프록시 설치 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 즐겨찾기 | k 명령 즐겨찾기" +echo "애플리케이션 시장관리 kapp" +echo "신청번호의 빠른 관리 k app 26 | k 앱 1패널 | k 앱 npm" +echo "시스템 정보 표시 k 정보" } 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|更新) @@ -14272,7 +14272,7 @@ else rsync_run) shift - send_stats "定时rsync同步" + send_stats "예약된 rsync 동기화" run_task "$@" ;; @@ -14291,7 +14291,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" @@ -14304,13 +14304,13 @@ else swap) shift - send_stats "快速设置虚拟内存" + send_stats "가상 메모리를 빠르게 설정하세요" add_swap "$@" ;; time|时区) shift - send_stats "快速设置时区" + send_stats "시간대를 빠르게 설정" set_timedate "$@" ;; @@ -14358,42 +14358,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 @@ -14403,15 +14403,15 @@ else shift case $1 in install|安装) - send_stats "快捷安装docker" + send_stats "도커를 빠르게 설치하세요" install_docker ;; ps|容器) - send_stats "快捷容器管理" + send_stats "빠른 컨테이너 관리" docker_ps ;; img|镜像) - send_stats "快捷镜像管理" + send_stats "빠른 이미지 관리" docker_image ;; *) @@ -14438,7 +14438,7 @@ else app) shift - send_stats "应用$@" + send_stats "신청$@" linux_panel "$@" ;; From 06484819411517eefe6ab1c3683d466710ce2e49 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 4 Jan 2026 04:27:42 +0000 Subject: [PATCH 14/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202026-01-04=2004:27:42?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 42 +++++++++++------------ jp/kejilion.sh | 76 +++++++++++++++++++++--------------------- kr/kejilion.sh | 90 +++++++++++++++++++++++++------------------------- 3 files changed, 104 insertions(+), 104 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 540c70603..71ae53ee3 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. @@ -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}" } @@ -953,12 +953,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() { @@ -3665,7 +3665,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} @@ -4460,7 +4460,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}" } @@ -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 setup is completed!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is complete!${gl_bai}" } @@ -4778,7 +4778,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 @@ -5169,7 +5169,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 @@ -5654,9 +5654,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 @@ -5698,7 +5698,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[@]}" @@ -6326,7 +6326,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 @@ -12140,7 +12140,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 "" @@ -12636,8 +12636,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) @@ -13175,7 +13175,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 @@ -13433,7 +13433,7 @@ EOF case "$choice" in [Yy]) clear - send_stats "One-stop tuning started" + send_stats "One-stop tuning starts" echo "------------------------------------------------" linux_update echo -e "[${gl_lv}OK${gl_bai}] 1/10. Update the system to the latest" @@ -13725,7 +13725,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" @@ -13839,7 +13839,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 @@ -13990,7 +13990,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 aa0e4a500..768a6bb4f 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -57,7 +57,7 @@ CheckFirstRun_true() { -# 関数の埋もれた情報を収集し、現在のスクリプトのバージョン番号、使用時間、システム バージョン、CPU アーキテクチャ、マシンの国、ユーザーが使用した関数名を記録する機能。機密情報は含まれませんので、ご安心ください。信じてください! +# この機能は、機能の埋め込み情報を収集し、現在のスクリプトのバージョン番号、使用時間、システム バージョン、CPU アーキテクチャ、マシンの国、およびユーザーが使用した機能名を記録します。機密情報は含まれませんので、ご安心ください。信じてください! # なぜこの機能が設計されたのでしょうか?その目的は、ユーザーが使いたい機能をより深く理解し、機能をさらに最適化し、ユーザーのニーズを満たす機能をさらに投入することです。 # send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご心配な場合はご利用をお断りすることも可能です。 @@ -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 "ポートがオープンされました" } @@ -953,12 +953,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() { @@ -2759,7 +2759,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 +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 @@ -3665,7 +3665,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} @@ -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" ;; @@ -4342,7 +4342,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 "------------------------" @@ -4460,7 +4460,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}" } @@ -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ログインの設定が完了しました!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定は完了です!${gl_bai}" } @@ -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 @@ -5654,9 +5654,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") # ユーザーにバックアップ ディレクトリの入力を求めるプロンプトを表示する @@ -5698,7 +5698,7 @@ create_backup() { echo "- $path" done - # バックアップを作成する + # バックアップの作成 echo "バックアップの作成$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" @@ -6007,7 +6007,7 @@ mount_partition() { MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションのマウント + # パーティションをマウントする mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then @@ -6138,7 +6138,7 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "Enter を押して続行します..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -6326,7 +6326,7 @@ run_task() { else echo "同期に失敗しました!以下の点をご確認ください。" echo "1. ネットワーク接続は正常ですか?" - echo "2. リモートホストにアクセスできるかどうか" + echo "2. リモート ホストにアクセスできますか?" echo "3. 認証情報は正しいですか?" echo "4. ローカル ディレクトリとリモート ディレクトリには正しいアクセス許可がありますか?" fi @@ -6425,7 +6425,7 @@ rsync_manager() { 0) break ;; *) echo "選択が無効です。もう一度お試しください。" ;; esac - read -e -p "Enter を押して続行します..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -7186,7 +7186,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 ファイルを編集する" @@ -7329,7 +7329,7 @@ linux_docker() { echo "" echo "ボリューム操作" echo "------------------------" - echo "1. 新しいボリュームを作成します" + echo "1. 新しいボリュームを作成する" echo "2. 指定したボリュームを削除します" echo "3. すべてのボリュームを削除します" echo "------------------------" @@ -9082,7 +9082,7 @@ while true; do fi echo "" echo "------------------------" - echo "1. 使用方法" + echo "1. 使用する" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -12140,7 +12140,7 @@ while true; do r) root_use send_stats "すべてのアプリを復元する" - echo "利用可能なアプリのバックアップ" + echo "利用可能なアプリケーションのバックアップ" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -12188,7 +12188,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}------------------------" @@ -12636,8 +12636,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "最初にIPv6に切り替えました" - send_stats "最初にIPv6に切り替えました" + echo "IPv6優先に切り替えました" + send_stats "IPv6優先に切り替えました" ;; 3) @@ -12865,7 +12865,7 @@ EOF echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9.タイ・バンコク時間" + echo "9. タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -13114,7 +13114,7 @@ EOF echo "------------------------" echo "1. 防御プログラムをインストールする" echo "------------------------" - echo "2. SSH インターセプト記録の表示" + echo "2. 查看SSH拦截记录" echo "3. リアルタイムログ監視" echo "------------------------" echo "9. 防御プログラムをアンインストールする" @@ -13162,20 +13162,20 @@ 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" # 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 @@ -13433,7 +13433,7 @@ EOF case "$choice" in [Yy]) clear - send_stats "ワンストップチューニングスタート" + send_stats "ワンストップチューニングが始まります" echo "------------------------------------------------" linux_update echo -e "[${gl_lv}OK${gl_bai}】1/10。システムを最新のものにアップデートする" @@ -13732,7 +13732,7 @@ linux_file() { continue fi - read -e -p "宛先パス (新しいファイル名またはディレクトリ名を含む) を入力してください:" dest_path + read -e -p "宛先パス (新しいファイルまたはディレクトリ名を含む) を入力してください:" dest_path if [ -z "$dest_path" ]; then echo "エラー: 宛先パスを入力してください。" send_stats "ファイルまたはディレクトリのコピーに失敗しました: 宛先パスが指定されていません" @@ -13839,7 +13839,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 @@ -13868,7 +13868,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}システムをクリーンアップする" @@ -13906,7 +13906,7 @@ while true; do 4) clear - send_stats "バックアップクラスター" + send_stats "バックアップクラスタ" echo -e "変更してください${gl_huang}/root/cluster/servers.py${gl_bai}ファイルをダウンロードしてバックアップを完了してください。" break_end ;; @@ -13990,7 +13990,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 17dde6600..6d19b6289 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -57,7 +57,7 @@ CheckFirstRun_true() { -# 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기기 국가 및 기능 이름을 기록하는 기능입니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! +# 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. # send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. @@ -953,12 +953,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() { @@ -1122,7 +1122,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 @@ -1524,11 +1524,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. 국내 등록 제한 ➠ 중국 ​​본토 환경의 경우 도메인 이름 등록 여부를 확인하세요." break_end clear echo "다시 배포해 보세요.$webname" @@ -1998,7 +1998,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 방어 끄기" @@ -2112,7 +2112,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}" @@ -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 # } @@ -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" } @@ -3620,7 +3620,7 @@ EOF donlond_frp frps - # 생성된 정보 출력 + # 생성된 정보를 출력 ip_address echo "------------------------" echo "클라이언트 배포에 필요한 매개변수" @@ -3665,7 +3665,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} @@ -3682,7 +3682,7 @@ remote_port = ${remote_port} EOF - # 생성된 정보 출력 + # 생성된 정보를 출력 echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." docker restart frpc @@ -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" ;; @@ -4460,7 +4460,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}" } @@ -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 ;; @@ -4912,7 +4912,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 @@ -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 @@ -5038,7 +5038,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 @@ -6326,7 +6326,7 @@ run_task() { else echo "동기화에 실패했습니다! 다음 사항을 확인하세요." echo "1. 네트워크 연결이 정상인가요?" - echo "2. 원격 호스트에 접근 가능한지 여부" + echo "2. 원격 호스트에 접근할 수 있나요?" echo "3. 인증정보가 정확합니까?" echo "4. 로컬 및 원격 디렉터리에 올바른 액세스 권한이 있습니까?" fi @@ -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 @@ -7026,7 +7026,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 @@ -7100,7 +7100,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 @@ -7145,7 +7145,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 "------------------------" @@ -8017,7 +8017,7 @@ linux_ldnmp() { echo "사용자 이름:$dbuse" echo "비밀번호:$dbusepasswd" echo "" - echo "레디스 주소: 레디스" + echo "레디스 주소 : 레디스" echo "redis 비밀번호: 기본적으로 입력되지 않음" echo "레디스 포트: 6379" echo "" @@ -8246,7 +8246,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 @@ -9073,7 +9073,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 @@ -12140,7 +12140,7 @@ while true; do r) root_use send_stats "모든 앱 복원" - echo "사용 가능한 앱 백업" + echo "사용 가능한 애플리케이션 백업" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -12636,8 +12636,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "먼저 IPv6로 전환됨" - send_stats "먼저 IPv6로 전환됨" + echo "IPv6 우선순위로 전환됨" + send_stats "IPv6 우선순위로 전환됨" ;; 3) @@ -12680,7 +12680,7 @@ EOF case "$choice" in 1) - send_stats "1G 가상 메모리가 설정되었습니다" + send_stats "1G 가상 메모리가 설정되었습니다." add_swap 1024 ;; @@ -12870,7 +12870,7 @@ EOF echo "유럽" echo "11. 영국 런던 시간 12. 프랑스 파리 시간" echo "13. 독일 베를린 시간 14. 러시아 모스크바 시간" - echo "15. 네덜란드 위트라흐트 시간 16. 스페인 마드리드 시간" + echo "15. 네덜란드 유트라흐트 시간 16. 스페인 마드리드 시간" echo "------------------------" echo "미국" echo "21. 미국 서부 시간 22. 미국 동부 시간" @@ -12938,7 +12938,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 @@ -13028,7 +13028,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) @@ -13175,7 +13175,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 @@ -13191,7 +13191,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 @@ -13281,7 +13281,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 "임계값에 도달하면 경고 메시지가 사용자에게 전송됩니다." @@ -13421,7 +13421,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}" @@ -13433,7 +13433,7 @@ EOF case "$choice" in [Yy]) clear - send_stats "원스톱 튜닝이 시작되었습니다" + send_stats "원스톱 튜닝 시작" echo "------------------------------------------------" linux_update echo -e "[${gl_lv}OK${gl_bai}] 1/10. 시스템을 최신으로 업데이트하세요" @@ -13839,7 +13839,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 @@ -13990,7 +13990,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 "" @@ -14218,7 +14218,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 정보" } From 8f92648161bd7de93a3fb21acf411e1d6ca8ce01 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 11 Jan 2026 04:26:34 +0000 Subject: [PATCH 15/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202026-01-11=2004:26:34?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 86 +- jp/kejilion.sh | 4712 ++++++++++++++++++++++++------------------------ kr/kejilion.sh | 2270 +++++++++++------------ 3 files changed, 3534 insertions(+), 3534 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 71ae53ee3..18792933c 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -2540,7 +2540,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 @@ -2559,7 +2559,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 @@ -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 "App uninstalled" + echo "App has been uninstalled" send_stats "uninstall$docker_name" ;; @@ -3906,7 +3906,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" @@ -4003,7 +4003,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) @@ -4460,7 +4460,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}" } @@ -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}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 } @@ -4778,7 +4778,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 @@ -5169,7 +5169,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 @@ -5312,7 +5312,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 @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "Website optimization model" + send_stats "Website optimization mode" ;; 4) cd ~ @@ -6326,7 +6326,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 @@ -6537,7 +6537,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}" @@ -7112,7 +7112,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 @@ -7479,7 +7479,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}------------------------" @@ -8815,7 +8815,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}------------------------" @@ -9153,7 +9153,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" @@ -9257,7 +9257,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" ;; *) @@ -9311,7 +9311,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 @@ -9409,7 +9409,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 @@ -10294,7 +10294,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 @@ -10516,7 +10516,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 @@ -10567,7 +10567,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 @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -10671,7 +10671,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 @@ -10999,7 +10999,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11405,7 +11405,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 @@ -11632,7 +11632,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 @@ -11770,7 +11770,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 @@ -11824,7 +11824,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 @@ -12057,7 +12057,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 @@ -12198,7 +12198,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" @@ -12444,7 +12444,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 "------------" @@ -12636,8 +12636,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) @@ -12875,7 +12875,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 "------------------------" @@ -13725,7 +13725,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" @@ -13873,7 +13873,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}" @@ -13990,7 +13990,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 "" @@ -14175,7 +14175,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 768a6bb4f..d95435dd8 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}テクノロジー ライオン スクリプト ツールボックスへようこそ${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 @@ -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 "最低限必要なスペース:${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 @@ -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 @@ -261,14 +261,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" @@ -281,43 +281,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 } @@ -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}正在安装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 @@ -502,63 +502,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]) @@ -567,28 +567,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 "------------------------------------------------------------" @@ -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) @@ -622,8 +622,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) @@ -642,44 +642,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]) @@ -688,7 +688,7 @@ while true; do [Nn]) ;; *) - echo "選択が無効です。Y または N を入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -756,16 +756,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}" } @@ -777,27 +777,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 @@ -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ステータスを確認する + # 检查当前的 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,117 +872,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" } @@ -992,7 +992,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 @@ -1002,12 +1002,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 @@ -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_code 的 IP 区域文件失败" continue fi @@ -1052,7 +1052,7 @@ manage_country_rules() { iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP - echo "正常にブロックされました$country_codeIPアドレス" + echo "已成功阻止 $country_code 的 IP 地址" rm "${country_code,,}.zone" ;; @@ -1062,7 +1062,7 @@ manage_country_rules() { fi if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "エラー: ダウンロード$country_codeIPゾーンファイルが失敗しました" + echo "错误:下载 $country_code 的 IP 区域文件失败" 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_code 的 IP 地址" rm "${country_code,,}.zone" ;; @@ -1086,11 +1086,11 @@ manage_country_rules() { ipset destroy "$ipset_name" fi - echo "正常に削除されました$country_codeIPアドレス制限" + echo "已成功解除 $country_code 的 IP 地址限制" ;; *) - echo "使用法: manage_country_rules {block|allow|unblock} " + echo "用法: manage_country_rules {block|allow|unblock} " ;; esac done @@ -1111,42 +1111,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. 指定国における知的財産制限を解除する" + 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 @@ -1159,10 +1159,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 @@ -1175,40 +1175,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 @@ -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_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" ;; *) @@ -1250,23 +1250,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 @@ -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 @@ -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}" @@ -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 @@ -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 @@ -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,15 +1446,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 "" } @@ -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" @@ -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 "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 @@ -1542,7 +1542,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 @@ -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,8 +1616,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}完成" } @@ -1636,11 +1636,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" } @@ -1650,29 +1650,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_FILECF 情報は後で変更できます。" - 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 "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" \ @@ -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 @@ -1696,28 +1696,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 @@ -1733,23 +1733,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 @@ -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,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」を含む行の前に新しい定義を挿入します。 + # 插入新定义,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /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,11 +1881,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 @@ -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,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 @@ -1983,31 +1983,31 @@ nginx_gzip() { web_security() { - send_stats "LDNMP環境防御" + send_stats "LDNMP环境防御" while true; do check_f2b_status check_waf_status check_cf_mode clear - echo -e "サーバー Web サイト防御プログラム${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 "1. 安装防御程序" echo "------------------------" - echo "5. SSH 傍受記録の表示 6. Web サイト傍受記録の表示" - echo "7. 防御ルールのリストを表示します。 8. リアルタイム監視のログを表示します。" + echo "5. 查看SSH拦截记录 6. 查看网站拦截记录" + echo "7. 查看防御规则列表 8. 查看日志实时监控" echo "------------------------" - echo "11. インターセプトパラメータを設定します。 12. ブロックされたすべての IP をクリアします。" + echo "11. 配置拦截参数 12. 清除所有拉黑的IP" echo "------------------------" - echo "21. クラウドフレア モード 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 @@ -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 "クラウドフレアモード" - 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 @@ -2107,21 +2107,21 @@ 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后台,站点-安全性-事件中查看拦截记录" ;; 22) - send_stats "高負荷により5秒シールドが可能" - echo -e "${gl_huang}Web サイトは 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 @@ -2138,23 +2138,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) @@ -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 @@ -2198,21 +2198,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 @@ -2228,33 +2228,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 @@ -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 @@ -2278,23 +2278,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 @@ -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 @@ -2316,7 +2316,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP 環境が高パフォーマンス モードに設定されている" + echo "LDNMP环境已设置成 高性能模式" ;; 3) @@ -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 # } @@ -2386,7 +2386,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "訪問先住所:" +echo "访问地址:" ip_address @@ -2424,31 +2424,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 @@ -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,34 +2477,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 @@ -2514,7 +2514,7 @@ block_container_port() { fi - echo "IP+ポートはサービスへのアクセスをブロックされています" + echo "已阻止IP+端口访问该服务" save_iptables_rules } @@ -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 @@ -2554,17 +2554,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 +2575,7 @@ clear_container_rules() { fi - echo "IP+ポートによるサービスへのアクセスが許可されました" + echo "已允许IP+端口访问该服务" save_iptables_rules } @@ -2589,25 +2589,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 +2616,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 +2648,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,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. 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) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${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 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 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,19 +2860,19 @@ 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) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${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" @@ -3063,11 +3063,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 +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 @@ -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,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 @@ -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,16 +3185,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 +3206,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 @@ -3247,17 +3247,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 @@ -3280,14 +3280,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 @@ -3340,12 +3340,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//') @@ -3358,35 +3358,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 @@ -3395,15 +3395,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') @@ -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" {} + @@ -3442,10 +3442,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 @@ -3459,25 +3459,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 @@ -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 "公式サイト紹介:$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 @@ -3541,20 +3541,20 @@ while true; do panel_app_install add_app_id - send_stats "${panelname}インストール" + send_stats "${panelname}安装" ;; 2) panel_app_manage 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 @@ -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,17 +3620,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 @@ -3640,9 +3640,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 @@ -3662,17 +3662,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 を入力してください [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} @@ -3682,8 +3682,8 @@ remote_port = ${remote_port} EOF - # 生成された情報を出力する - echo "仕える$service_namefrpc.toml に正常に追加されました" + # 输出生成的信息 + echo "服务 $service_name 已成功添加到 frpc.toml" docker restart frpc @@ -3694,12 +3694,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 @@ -3709,7 +3709,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # ヘッダーを印刷します + # 打印表头 printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -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, \ @@ -3739,11 +3739,11 @@ list_forwarding_services() { type } - # 現在のサービス名を更新します + # 更新当前服务名称 if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 前回の値をクリア + # 清除之前的值 local_ip="" local_port="" remote_port="" @@ -3772,7 +3772,7 @@ list_forwarding_services() { } END { - # 最後のサービスに関する情報を出力します + # 打印最后一个服务的信息 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 @@ -3804,18 +3804,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 @@ -3824,7 +3824,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}" @@ -3851,7 +3851,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRPサーバー" + send_stats "FRP服务端" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3859,25 +3859,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 @@ -3885,7 +3885,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 +3895,7 @@ frps_panel() { donlond_frp frps add_app_id - echo "FRPサーバーを更新しました" + echo "FRP服务端已经更新完成" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3906,37 +3906,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服务状态" ;; *) @@ -3949,7 +3949,7 @@ frps_panel() { frpc_panel() { - send_stats "FRPクライアント" + send_stats "FRP客户端" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3957,10 +3957,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 @@ -3968,13 +3968,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 @@ -3982,7 +3982,7 @@ frpc_panel() { configure_frpc add_app_id - echo "FRPクライアントがインストールされています" + echo "FRP客户端已经安装完成" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -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,68 +4049,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. 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 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 をアンインストールしています..." - 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 \ @@ -4118,31 +4118,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" ;; *) @@ -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 @@ -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 @@ -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,13 +4243,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 @@ -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 "未使用の依存関係をクリーンアップします..." + 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 @@ -4327,26 +4327,26 @@ 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アドレス" + 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" @@ -4354,7 +4354,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,14 +4362,14 @@ 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 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 が 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/' \ @@ -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" @@ -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 @@ -4460,17 +4460,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 @@ -4488,7 +4488,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}" } @@ -4497,26 +4497,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 @@ -4527,41 +4527,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" @@ -4577,21 +4577,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 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 + read -e -p "请选择要重装的系统: " sys_choice case "$sys_choice" in 1) - send_stats "debian13を再インストールする" + send_stats "重装debian 13" dd_xitong_3 bash reinstall.sh debian 13 reboot @@ -4599,49 +4599,49 @@ dd_xitong() { ;; 2) - send_stats "debian12を再インストールする" + send_stats "重装debian 12" dd_xitong_1 bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "debian11を再インストールする" + send_stats "重装debian 11" dd_xitong_1 bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "debian10を再インストールする" + 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 @@ -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 @@ -4666,7 +4666,7 @@ dd_xitong() { ;; 23) - send_stats "alma10を再インストールする" + send_stats "重装alma10" dd_xitong_3 bash reinstall.sh almalinux 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 @@ -4714,7 +4714,7 @@ dd_xitong() { ;; 29) - send_stats "centos10を再インストールする" + send_stats "重装centos10" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4722,7 +4722,7 @@ dd_xitong() { ;; 30) - send_stats "centos9を再インストールする" + send_stats "重装centos9" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4730,7 +4730,7 @@ dd_xitong() { ;; 31) - send_stats "アルパインを再インストールする" + send_stats "重装alpine" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4738,7 +4738,7 @@ dd_xitong() { ;; 32) - send_stats "アーチを再インストールする" + send_stats "重装arch" dd_xitong_3 bash reinstall.sh arch reboot @@ -4746,7 +4746,7 @@ dd_xitong() { ;; 33) - send_stats "kaliを再インストールする" + send_stats "重装kali" dd_xitong_3 bash reinstall.sh kali reboot @@ -4754,7 +4754,7 @@ dd_xitong() { ;; 34) - send_stats "オープニューラーを再インストールする" + send_stats "重装openeuler" dd_xitong_3 bash reinstall.sh openeuler 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 "Feiniu を再インストールする" + send_stats "重装飞牛" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4778,7 +4778,7 @@ dd_xitong() { ;; 41) - send_stats "Windows 11を再インストールする" + send_stats "重装windows11" 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 "重装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 @@ -4802,7 +4802,7 @@ dd_xitong() { ;; 44) - send_stats "Windowsサーバー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サーバー22を再インストールします" + send_stats "重装windows server 22" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot @@ -4818,7 +4818,7 @@ dd_xitong() { ;; 46) - send_stats "Windowsサーバー19を再インストールします" + send_stats "重装windows server 19" dd_xitong_2 bash InstallNET.sh -windows 2019 -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 @@ -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 "------------------------" - 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) @@ -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 カーネルをアップグレードして BBR3 を有効にします。" + echo "仅支持Debian/Ubuntu" + echo "请备份数据,将为你升级Linux内核开启BBR3" echo "------------------------------------------------" - read -e -p "続行してもよろしいですか? (はい/いいえ):" choice + read -e -p "确定继续吗?(Y/N): " 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+') @@ -4949,17 +4949,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 +4968,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 } @@ -5009,37 +5009,37 @@ elrepo_install() { elrepo() { root_use - send_stats "Red Hat カーネル管理" + 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 "Red Hat カーネルをアンインストールする" + echo "elrepo内核已卸载。重启后生效" + send_stats "卸载红帽内核" server_reboot ;; @@ -5052,26 +5052,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 "続行してもよろしいですか? (はい/いいえ):" 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 +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 \ @@ -5092,19 +5092,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 +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 \ @@ -5122,8 +5122,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}" } @@ -5135,23 +5135,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 @@ -5160,7 +5160,7 @@ clamav() { ;; 2) - send_stats "重要なディレクトリのスキャン" + send_stats "重要目录扫描" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5168,8 +5168,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 +5186,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 +5212,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 +5253,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 +5294,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 } -# Webサイト構築最適化機能 +# 网站搭建优化函数 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 +5336,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 +5356,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 サイト最適化モード: 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 +5438,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 @@ -5447,17 +5447,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 } @@ -5467,29 +5467,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 +5511,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 +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}#" @@ -5535,9 +5535,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 +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 "有効にすると、重要なファイルを誤って削除することを防ぐために、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 +5615,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 +5623,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 ;; *) @@ -5650,23 +5650,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 "- Enter キーを押して、デフォルトのディレクトリ (/etc /usr /home) を使用します。" - read -r -p "バックアップするディレクトリを入力してください (複数のディレクトリをスペースで区切って、Enter キーを押してデフォルトのディレクトリを使用します)。" 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" # 配置文件和软件包配置 @@ -5674,119 +5674,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 } @@ -5798,56 +5798,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 "キーの内容を貼り付けてください (貼り付け後に Enter を 2 回押します)。" + echo "请粘贴密钥内容 (粘贴完成后按两次回车):" local password_or_key="" while IFS= read -r line; do - # 入力が空行で、キーの内容にすでに先頭が含まれている場合は、入力を終了します + # 如果输入为空行且密钥内容已经包含了开头,则结束输入 if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi - # それが最初の行である場合、またはすでにキーコンテンツの入力を開始している場合は、追加を続けます。 + # 如果是第一行或已经开始输入密钥内容,则继续添加 if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then local password_or_key+="${line}"$'\n' fi done - # キーコンテンツかどうかを確認する + # 检查是否是密钥内容 if [[ "$password_or_key" == *"-----BEGIN"* && "$password_or_key" == *"PRIVATE KEY-----"* ]]; then local key_file="$KEY_DIR/$name.key" echo -n "$password_or_key" > "$key_file" @@ -5856,89 +5856,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 @@ -5950,21 +5950,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 } @@ -5980,156 +5980,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 ;; @@ -6138,64 +6138,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 "- リモートディレクトリ: /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 "キーの内容を貼り付けてください (貼り付け後に Enter を 2 回押します)。" + echo "请粘贴密钥内容 (粘贴完成后按两次回车):" local password_or_key="" while IFS= read -r line; do - # 入力が空行で、キーの内容にすでに先頭が含まれている場合は、入力を終了します + # 如果输入为空行且密钥内容已经包含了开头,则结束输入 if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi - # それが最初の行である場合、またはすでにキーコンテンツの入力を開始している場合は、追加を続けます。 + # 如果是第一行或已经开始输入密钥内容,则继续添加 if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then password_or_key+="${line}"$'\n' fi done - # キーコンテンツかどうかを確認する + # 检查是否是密钥内容 if [[ "$password_or_key" == *"-----BEGIN"* && "$password_or_key" == *"PRIVATE KEY-----"* ]]; then local key_file="$KEY_DIR/${name}_sync.key" echo -n "$password_or_key" > "$key_file" @@ -6203,63 +6203,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 @@ -6270,51 +6270,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 @@ -6322,32 +6322,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="" @@ -6355,66 +6355,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 ;; @@ -6423,9 +6423,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "選択が無効です。もう一度お試しください。" ;; + *) echo "无效的选择,请重试。" ;; esac - read -e -p "続行するには Enter キーを押してください..." + read -e -p "按回车键继续..." done } @@ -6440,7 +6440,7 @@ rsync_manager() { linux_info() { clear - send_stats "システム情報の問い合わせ" + send_stats "系统信息查询" ip_address @@ -6490,41 +6490,41 @@ 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" - 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 @@ -6537,111 +6537,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通信接続ツール" - 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}レンジャーファイル管理ツール" - 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 "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) @@ -6649,7 +6649,7 @@ linux_tools() { install btop clear btop - send_stats "btopをインストールする" + send_stats "安装btop" ;; 12) clear @@ -6658,7 +6658,7 @@ linux_tools() { clear ranger cd ~ - send_stats "レンジャーをインストールする" + send_stats "安装ranger" ;; 13) clear @@ -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 @@ -6694,7 +6694,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "ナノをインストールする" + send_stats "安装nano" ;; @@ -6705,7 +6705,7 @@ linux_tools() { clear git --help cd ~ - send_stats "gitをインストールする" + send_stats "安装git" ;; 21) @@ -6713,67 +6713,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 "ニンベーダーをインストールする" + 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 "インストールされているツール名 (wgetcurlsudohtop) を入力してください:" 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) @@ -6781,7 +6781,7 @@ linux_tools() { ;; *) - echo "無効な入力です!" + echo "无效的输入!" ;; esac break_end @@ -6795,27 +6795,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 "アルパインがBBR3をオープン" + send_stats "alpine开启bbr3" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6857,21 +6857,21 @@ docker_ssh_migration() { list_backups() { local BACKUP_ROOT="/tmp" - 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 -e -p "バックアップするコンテナの名前を入力してください (実行中のすべてのコンテナをバックアップするには、複数のスペースを区切って Enter キーを押します)。" containers + read -e -p "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " 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,28 +6892,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}検出されました$cdocker-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 -e -p "作成ディレクトリが検出されません。パスを手動で入力してください。" project_dir + 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}Compose 项目 [$project_name] 已备份过,跳过重复打包...${NC}" continue fi @@ -6921,137 +6921,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 恢复: $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}" + 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 -e -p "復元するバックアップ ディレクトリを入力してください:" BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリが存在しません${NC}"; return; } + send_stats "Docker还原" + 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 プロジェクトの復元を優先します --------- + # --------- 优先还原 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}Compose 项目 [$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" - 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 @@ -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 @@ -7095,68 +7095,68 @@ 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 "请输入要迁移的备份目录: " 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" - 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; } + 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}" } # ---------------------------- - # メインメニュー + # 主菜单 # ---------------------------- 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 -e -p "選択してください:" choice + read -e -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 @@ -7173,38 +7173,38 @@ linux_docker() { while true; do clear - # send_stats "ドッカー管理" + # 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}不要な 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 ;; @@ -7215,22 +7215,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 "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 "" @@ -7245,8 +7245,8 @@ linux_docker() { 5) while true; do clear - send_stats "Dockerネットワーク管理" - echo "Dockerネットワークリスト" + send_stats "Docker网络管理" + echo "Docker网络列表" echo "------------------------------------------------------------" docker network ls echo "" @@ -7270,36 +7270,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 @@ -7308,8 +7308,8 @@ linux_docker() { ;; 4) - send_stats "ネットワークを削除する" - read -e -p "削除するネットワーク名を入力してください:" dockernetwork + send_stats "删除网络" + read -e -p "请输入要删除的网络名: " dockernetwork docker network rm $dockernetwork ;; @@ -7323,29 +7323,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 @@ -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]) @@ -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,13 +7385,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) ;; @@ -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,151 +7462,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}Yeawu ストリーミング メディアのロック解除の検出" - 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 トリプルネットワークバックホール回線テスト" - 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}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}ベンチパフォーマンステスト" - 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 "Yeawu ストリーミング メディアのロック解除の検出" + 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 "超高速トリプルネットワーク速度テスト" + 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 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 "icu/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 ;; @@ -7616,7 +7616,7 @@ linux_test() { ;; *) - echo "無効な入力です!" + echo "无效的输入!" ;; esac break_end @@ -7632,51 +7632,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}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 "インストールしてもよろしいですか? (はい/いいえ):" 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 コアの数と占有率を入力するよう求めます。ユーザーが Enter キーを押すと、デフォルト値が使用されます。 - 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" \ @@ -7684,14 +7684,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 ;; @@ -7699,20 +7699,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 "続行してもよろしいですか? (はい/いいえ):" 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) @@ -7724,28 +7724,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 - 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) @@ -7756,15 +7756,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 +7785,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 +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 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}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 軽量ブログ 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 ブログ サイトをインストールする" - 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 +7872,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 +7898,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 +7934,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 - # AppleCMS + # 苹果CMS webname="苹果CMS" - send_stats "インストール$webname" - echo "導入を開始する$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7973,24 +7973,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 +8011,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 "ユーザー名: 管理者" - 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 +8075,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 +8088,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 +8113,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 +8126,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 +8152,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 +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格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8193,20 +8193,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 +8217,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 +8235,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 で終わる圧縮パッケージである必要があります。 Pagoda/1panel バックアップ データのインポートをサポートするには、/home/ ディレクトリに配置してください。" - 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 +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 @@ -8278,12 +8278,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 +8296,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 +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" @@ -8332,11 +8332,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 +8356,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 +8379,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 +8397,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 +8431,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 +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格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " 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 "请输入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,23 +8492,23 @@ 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 "バックアップ データをリモート サーバーに転送しますか? (はい/いいえ):" choice + echo "备份文件已创建: /home/$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 /home/*.tar.gz | head -1) @@ -8516,9 +8516,9 @@ 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 "文件已传送至远程服务器home目录。" else - echo "転送するファイルが見つかりませんでした。" + echo "未找到要传送的文件。" fi break ;; @@ -8526,7 +8526,7 @@ linux_ldnmp() { break ;; *) - echo "選択が無効です。Y または N を入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac done @@ -8534,9 +8534,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 @@ -8546,18 +8546,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 ;; *) @@ -8571,19 +8571,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 "Enter キーを押して最新のバックアップを復元し、バックアップ ファイル名を入力して指定したバックアップを復元し、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 @@ -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 ;; @@ -8620,11 +8620,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,13 +8644,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 @@ -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" - 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) (Enter キーを押して最新バージョンを取得します):" 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 @@ -8709,8 +8709,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 +8721,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 @@ -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]) @@ -8769,7 +8769,7 @@ linux_ldnmp() { ;; *) - echo "選択が無効です。Y または N を入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -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..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8813,71 +8813,71 @@ 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 リモート デスクトップ 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}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}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}メモウェブメモ${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}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}Xiaoya alistファミリーバケット" - echo -e "${gl_kjlan}39. ${color39}Bililive ライブ配信録画ツール${gl_kjlan}40. ${color40}webssh 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}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}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}ディープシークチャット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ツールツールボックス" - 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}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}Thunder オフライン ダウンロード ツール${gl_kjlan}78. ${color78}PandaWiki インテリジェント文書管理システム" - echo -e "${gl_kjlan}79. ${color79}Beszel サーバーの監視${gl_kjlan}80. ${color80}リンクワーデンのブックマーク管理" + 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}イミッチピクチャービデオマネージャー${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}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}ペーパーレス文書管理プラットフォーム${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}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}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 @@ -9030,8 +9030,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,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "ネザを構築する" + send_stats "搭建哪吒" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,20 +9073,20 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "ネザモニタリング$check_docker $update_status" - echo "オープンソースの軽量で使いやすいサーバー監視および運用保守ツール" - echo "公式 Web サイト構築ドキュメント: 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}}' 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 "0. 返回上一级选单" echo "------------------------" - read -e -p "選択内容を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -9143,7 +9143,7 @@ while true; do ;; 9|mail) - send_stats "郵便局を建てる" + send_stats "搭建邮局" clear install telnet local app_id="9" @@ -9153,44 +9153,44 @@ 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}}' 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 + 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" @@ -9200,7 +9200,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "続行するには任意のキーを押してください..." + echo "按任意键继续..." read -n 1 -s -r -p "" install jq @@ -9219,9 +9219,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 "" @@ -9244,9 +9244,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 "" ;; @@ -9257,7 +9257,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "アプリがアンインストールされました" + echo "应用已卸载" ;; *) @@ -9291,7 +9291,7 @@ while true; do clear ip_address - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -9301,7 +9301,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 } @@ -9311,7 +9311,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "アプリがアンインストールされました" + echo "应用已卸载" } docker_app_plus @@ -9395,7 +9395,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -9409,7 +9409,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 @@ -9554,7 +9554,7 @@ while true; do ;; 19|safeline) - send_stats "雷のプールを作る" + send_stats "搭建雷池" local app_id="19" local docker_name=safeline-mgt @@ -9562,20 +9562,20 @@ while true; do while true; do check_docker_app clear - echo -e "サンダープールサービス$check_docker" - echo "Leichi は、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}}' 2>/dev/null | grep -q "$docker_name"; 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) @@ -9585,7 +9585,7 @@ while true; do add_app_id clear - echo "Leichi WAFパネルを導入しました" + echo "雷池WAF面板已经安装完成" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9598,7 +9598,7 @@ while true; do add_app_id clear - echo "Leichi WAF パネルが更新されました" + echo "雷池WAF面板已经更新完成" check_docker_app_ip ;; 3) @@ -9609,7 +9609,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" ;; *) @@ -9728,8 +9728,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 \ @@ -10017,7 +10017,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" @@ -10070,7 +10070,7 @@ while true; do ;; 38|xiaoya) - send_stats "シャオヤファミリーバケツ" + send_stats "小雅全家桶" clear install_docker check_disk_space 1 @@ -10274,9 +10274,9 @@ while true; do prometheus_install clear ip_address - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip - echo "初期のユーザー名とパスワードは次のとおりです: admin" + echo "初始用户名密码均为: admin" } docker_app_update() { @@ -10294,7 +10294,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "アプリがアンインストールされました" + echo "应用已卸载" } docker_app_plus @@ -10381,7 +10381,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 ;; @@ -10501,7 +10501,7 @@ while true; do docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -10516,7 +10516,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 @@ -10544,7 +10544,7 @@ while true; do docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -10559,7 +10559,7 @@ while true; do docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -10567,7 +10567,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 @@ -10588,17 +10588,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 "应用已更新" } @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "アプリがアンインストールされました" + echo "应用已卸载" } docker_app_plus @@ -10655,7 +10655,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 } @@ -10671,7 +10671,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 @@ -10933,7 +10933,7 @@ while true; do docker_rum() { - read -e -p "LibreTV のログイン パスワードを設定します。" app_passwd + read -e -p "设置LibreTV的登录密码: " app_passwd docker run -d \ --name libretv \ @@ -10967,9 +10967,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 @@ -10985,7 +10985,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -10999,7 +10999,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 @@ -11072,8 +11072,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 \ @@ -11170,11 +11170,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) @@ -11183,17 +11183,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 } @@ -11203,7 +11203,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11288,7 +11288,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 \ @@ -11392,7 +11392,7 @@ while true; do docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -11405,7 +11405,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 @@ -11566,7 +11566,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 @@ -11618,7 +11618,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -11632,7 +11632,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 @@ -11707,8 +11707,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} \ @@ -11756,7 +11756,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -11770,7 +11770,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 @@ -11810,7 +11810,7 @@ while true; do block_container_port "$docker_name" "$ipv4_address" clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -11824,7 +11824,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 @@ -11842,9 +11842,9 @@ 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 + read -e -p "请输入 WireGuard 网段 (默认 10.13.13.0): " NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11914,18 +11914,18 @@ while true; do sleep 2 echo - echo -e "${gl_huang}すべてのクライアント QR コード構成:${gl_bai}" + 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}" + 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 をダウンロードし、上の 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}${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 } @@ -11953,16 +11953,16 @@ while true; do local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" - # ディレクトリが存在しない場合は作成する + # 创建目录(如果不存在) mkdir -p "$(dirname "$CONFIG_FILE")" - echo "クライアント設定を貼り付け、Enter キーを 2 回押して保存してください。" + echo "请粘贴你的客户端配置,连续按两次回车保存:" - # 変数を初期化する + # 初始化变量 input="" empty_line_count=0 - # ユーザー入力を 1 行ずつ読み取ります + # 逐行读取用户输入 while IFS= read -r line; do if [[ -z "$line" ]]; then ((empty_line_count++)) @@ -11975,10 +11975,10 @@ while true; do fi done - # 設定ファイルの書き込み + # 写入配置文件 echo "$input" > "$CONFIG_FILE" - echo "クライアント設定の保存場所$CONFIG_FILE" + echo "客户端配置已保存到 $CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12023,10 +12023,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 @@ -12043,7 +12043,7 @@ while true; do docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -12057,7 +12057,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 @@ -12097,24 +12097,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" - read -e -p "バックアップ データをリモート サーバーに転送しますか? (はい/いいえ):" choice + 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) @@ -12122,14 +12122,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项目,不包含宝塔,1panel等建站面板的数据备份。" break ;; esac @@ -12139,29 +12139,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 "Enter キーを押して最新のバックアップを復元し、バックアップ ファイル名を入力して指定したバックアップを復元し、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 ;; @@ -12184,35 +12184,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}ワークスペース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 @@ -12220,7 +12220,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "ワークスペースの開始$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -12228,63 +12228,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 ;; @@ -12296,21 +12296,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 ;; @@ -12326,29 +12326,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 @@ -12373,54 +12373,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}ネイティブホスト解像度${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}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}Tech 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 @@ -12428,34 +12428,34 @@ linux_Settings() { 2) clear - send_stats "ログインパスワードを設定する" - echo "ログインパスワードを設定する" + send_stats "设置你的登录密码" + echo "设置你的登录密码" passwd ;; 3) root_use - send_stats "rootパスワードモード" + 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 のバージョン番号を入力します (終了するには 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 @@ -12488,7 +12488,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 @@ -12517,55 +12517,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 @@ -12584,8 +12584,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 @@ -12600,51 +12600,51 @@ 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 "------------------------" 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 "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優先に切り替えました" + 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修復" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; *) @@ -12662,43 +12662,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 "已设置自定义虚拟内存" ;; *) @@ -12711,8 +12711,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 @@ -12723,62 +12723,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" ;; @@ -12791,50 +12791,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 "" @@ -12842,46 +12842,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. 美国西部时间 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 @@ -12924,21 +12924,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 @@ -12956,11 +12956,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 @@ -12968,32 +12968,32 @@ EOF 19) root_use - send_stats "システムアップデートソースを変更する" + send_stats "换系统更新源" clear - echo "更新元リージョンの選択" - echo "LinuxMirror にアクセスしてシステム アップデート ソースを切り替える" + 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 @@ -13001,62 +13001,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 # 跳出循环,退出菜单 @@ -13068,32 +13068,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 # 跳出循环,退出菜单 @@ -13104,24 +13104,24 @@ EOF 22) root_use - send_stats "SSH防御" + 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 -e "SSH防御程序 $check_f2b_status" + echo "fail2ban是一个SSH防止暴力破解工具" + echo "官网介绍: ${gh_proxy}github.com/fail2ban/fail2ban" echo "------------------------" - echo "1. 防御プログラムをインストールする" + echo "1. 安装防御程序" echo "------------------------" echo "2. 查看SSH拦截记录" - echo "3. リアルタイムログ監視" + 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) f2b_install_sshd @@ -13143,7 +13143,7 @@ EOF 9) remove fail2ban rm -rf /etc/fail2ban - echo "Fail2Ban 防御プログラムがアンインストールされました" + echo "Fail2Ban防御程序已卸载" break ;; *) @@ -13156,47 +13156,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 "当前流量使用情况,重启服务器流量计算会清零!" 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 的值 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 ~ @@ -13209,15 +13209,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 @@ -13230,40 +13230,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 @@ -13279,18 +13279,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 "続行してもよろしいですか? (はい/いいえ):" 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 @@ -13312,7 +13312,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 @@ -13323,21 +13323,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 @@ -13381,7 +13381,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; } @@ -13404,62 +13404,62 @@ EOF 41) clear - send_stats "掲示板" - echo "Technology Lion の公式掲示板をご覧ください。脚本についてのアイデアがあれば、メッセージを残して交換してください。" + send_stats "留言板" + echo "访问科技lion官方留言板,您对脚本有任何想法欢迎留言交流!" echo "https://board.kejilion.pro" - echo "公開パスワード: kejilion.sh" + echo "公共密码: kejilion.sh" ;; 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 "ワンクリックメンテナンスを実行してもよろしいですか? (はい/いいえ):" 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) @@ -13476,25 +13476,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 @@ -13502,7 +13502,7 @@ EOF 99) clear - send_stats "システムを再起動します" + send_stats "重启系统" server_reboot ;; 100) @@ -13518,32 +13518,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 @@ -13559,11 +13559,11 @@ EOF 102) clear - send_stats "Tech Lion スクリプトをアンインストールする" - echo "Tech Lion スクリプトをアンインストールする" + send_stats "卸载科技lion脚本" + echo "卸载科技lion脚本" echo "------------------------------------------------" - echo "kejilion スクリプトは、他の機能に影響を与えることなく完全にアンインストールされます。" - read -e -p "続行してもよろしいですか? (はい/いいえ):" choice + echo "将彻底卸载kejilion脚本,不影响你其他功能" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) @@ -13571,16 +13571,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 ;; @@ -13590,7 +13590,7 @@ EOF ;; *) - echo "無効な入力です!" + echo "无效的输入!" ;; esac break_end @@ -13608,187 +13608,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. 解压文件目录 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 "请输入远端服务器用户名 (默认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 @@ -14086,15 +14086,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 ;; *) @@ -14116,41 +14116,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スクリプト・コレクション" -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}Eudemons Parlu サーバー開始スクリプト" +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_info ;; - 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 ;; @@ -14161,13 +14161,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "Eudemons Parlu サーバー開始スクリプト" ; 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 @@ -14175,70 +14175,70 @@ 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 アップデートを更新 | kアップデート" -echo "クリーン系ジャンククリーン |きれいだ" -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 "rsync リモート同期ツール k rsync | k リモート同期" -echo "ハードディスク管理ツール k ディスク | k ハードディスクの管理" -echo "イントラネット普及率 (サーバー) k frps" -echo "イントラネット浸透率 (クライアント) k frpc" -echo "ソフトウェア起動 k start sshd | 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 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 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 ロード バランシング |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 お気に入り | k コマンドのお気に入り" -echo "アプリケーションマーケット管理kアプリ" -echo "申請番号の迅速な管理 k app 26 | kアプリ1パネル | k アプリ npm" -echo "システム情報を表示 k info" +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" +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 "显示系统信息 k info" } 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|更新) @@ -14272,7 +14272,7 @@ else rsync_run) shift - send_stats "スケジュールされたrsync同期" + send_stats "定时rsync同步" run_task "$@" ;; @@ -14291,7 +14291,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" @@ -14304,13 +14304,13 @@ else swap) shift - send_stats "仮想メモリをすばやくセットアップする" + send_stats "快速设置虚拟内存" add_swap "$@" ;; time|时区) shift - send_stats "タイムゾーンを素早く設定" + send_stats "快速设置时区" set_timedate "$@" ;; @@ -14358,42 +14358,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 @@ -14403,15 +14403,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 ;; *) @@ -14438,7 +14438,7 @@ else app) shift - send_stats "申し込む$@" + send_stats "应用$@" linux_panel "$@" ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 6d19b6289..fcc4a0fdf 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -59,7 +59,7 @@ CheckFirstRun_true() { # 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. -# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. +# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 불편하신 점이 있으시면 이용을 거부하실 수 있습니다. @@ -1122,7 +1122,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 "------------------------" @@ -1291,7 +1291,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 가상 메모리를 만들어야 하는지 결정 +# 가상 메모리를 만들어야 하는지 확인 [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -1528,7 +1528,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" @@ -1749,7 +1749,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 @@ -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 @@ -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 # } @@ -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 @@ -2656,7 +2656,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 @@ -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 @@ -2759,7 +2759,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 +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 @@ -4460,7 +4460,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}" } @@ -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 ;; @@ -4912,7 +4912,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 @@ -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 @@ -5038,7 +5038,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 @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "웹사이트 최적화 모델" + send_stats "웹사이트 최적화 모드" ;; 4) cd ~ @@ -5598,7 +5598,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 "------------------------" @@ -5837,7 +5837,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 @@ -6185,7 +6185,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 @@ -6326,7 +6326,7 @@ run_task() { else echo "동기화에 실패했습니다! 다음 사항을 확인하세요." echo "1. 네트워크 연결이 정상인가요?" - echo "2. 원격 호스트에 접근할 수 있나요?" + echo "2. 원격 호스트에 접근 가능한지 여부" echo "3. 인증정보가 정확합니까?" echo "4. 로컬 및 원격 디렉터리에 올바른 액세스 권한이 있습니까?" fi @@ -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 @@ -7010,7 +7010,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 @@ -7100,7 +7100,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 @@ -7112,7 +7112,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 @@ -7186,7 +7186,7 @@ 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}清理无用的docker容器和镜像网络数据卷" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}8. ${gl_bai}Docker 소스 변경" echo -e "${gl_kjlan}9. ${gl_bai}daemon.json 파일 편집" @@ -7197,14 +7197,14 @@ linux_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 "도커 환경 설치" + send_stats "安装docker环境" install_add_docker ;; @@ -7215,22 +7215,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 "Docker 볼륨:${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 "" @@ -7245,8 +7245,8 @@ linux_docker() { 5) while true; do clear - send_stats "도커 네트워크 관리" - echo "도커 네트워크 목록" + send_stats "Docker网络管理" + echo "Docker网络列表" echo "------------------------------------------------------------" docker network ls echo "" @@ -7270,36 +7270,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 @@ -7308,8 +7308,8 @@ linux_docker() { ;; 4) - send_stats "네트워크 삭제" - read -e -p "삭제할 네트워크 이름을 입력하세요:" dockernetwork + send_stats "删除网络" + read -e -p "请输入要删除的网络名: " dockernetwork docker network rm $dockernetwork ;; @@ -7323,29 +7323,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 @@ -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]) @@ -7363,7 +7363,7 @@ linux_docker() { [Nn]) ;; *) - echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7376,7 +7376,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]) @@ -7385,13 +7385,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) ;; @@ -7407,13 +7407,13 @@ linux_docker() { 11) clear - send_stats "도커 v6 켜짐" + send_stats "Docker v6 开" docker_ipv6_on ;; 12) clear - send_stats "도커 v6 닫기" + send_stats "Docker v6 关" docker_ipv6_off ;; @@ -7424,7 +7424,7 @@ linux_docker() { 20) clear - send_stats "도커 제거" + 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,151 +7462,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}예우 스트리밍 미디어 잠금 해제 감지" - 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 삼중 네트워크 백홀 회선 테스트" - 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 세 개의 네트워크 라인 테스트" - 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}벤치 성능 테스트" - 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 "예우 스트리밍 미디어 잠금 해제 감지" + 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 "초고속 트리플 네트워크 속도 테스트" + 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 "벤치 성능 테스트" + 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 ;; @@ -7616,7 +7616,7 @@ linux_test() { ;; *) - echo "입력이 잘못되었습니다!" + echo "无效的输入!" ;; esac break_end @@ -7632,51 +7632,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}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 "정말로 설치하시겠습니까? (예/아니요):" 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 코어 수와 점유율을 입력하라는 메시지를 표시합니다. 사용자가 Enter 키를 누르면 기본값이 사용됩니다. - 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容器 docker run -itd --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ @@ -7684,14 +7684,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 ;; @@ -7699,20 +7699,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 "계속하시겠습니까? (예/아니요):" 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. 우분투20.04:" sys_choice + read -e -p "请选择要重装的系统: 1. Debian12 | 2. Ubuntu20.04 : " sys_choice case "$sys_choice" in 1) @@ -7724,28 +7724,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 - 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) @@ -7756,15 +7756,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 +7785,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 +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}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 포럼 웹사이트 설치${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 +7872,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 +7898,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 +7934,20 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "데이터베이스 주소: mysql" - echo "사용자 이름:$dbuse" - echo "비밀번호:$dbusepasswd" - echo "데이터베이스 이름:$dbname" - echo "레디스 호스트: 레디스" + echo "数据库地址: mysql" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库名: $dbname" + echo "redis主机: redis" ;; 5) clear - # AppleCMS + # 苹果CMS webname="苹果CMS" - send_stats "설치하다$webname" - echo "배포 시작$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7973,24 +7973,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 +8011,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 "레디스 주소 : 레디스" - echo "redis 비밀번호: 기본적으로 입력되지 않음" - echo "레디스 포트: 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论坛 webname="flarum论坛" - send_stats "설치하다$webname" - echo "배포 시작$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8075,12 +8075,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 +8088,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 +8113,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 +8126,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 +8152,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 +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格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8193,20 +8193,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 +8217,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 +8235,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로 끝나는 압축 패키지여야 합니다. Pagoda/1panel 백업 데이터 가져오기를 지원하려면 /home/ 디렉토리에 넣으십시오." - 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 +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 @@ -8278,12 +8278,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 +8296,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 +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" @@ -8332,11 +8332,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 +8356,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 +8379,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 +8397,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 +8431,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 +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格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " 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 "请输入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,23 +8492,23 @@ 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 "백업 데이터를 원격 서버로 전송하시겠습니까? (예/아니요):" choice + echo "备份文件已创建: /home/$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 /home/*.tar.gz | head -1) @@ -8516,9 +8516,9 @@ 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 "文件已传送至远程服务器home目录。" else - echo "전송할 파일을 찾을 수 없습니다." + echo "未找到要传送的文件。" fi break ;; @@ -8526,7 +8526,7 @@ linux_ldnmp() { break ;; *) - echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." + echo "无效的选择,请输入 Y 或 N。" ;; esac done @@ -8534,9 +8534,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 @@ -8546,18 +8546,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 ;; *) @@ -8571,19 +8571,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 "최신 백업을 복원하려면 Enter 키를 누르고, 지정된 백업을 복원하려면 백업 파일 이름을 입력하고, 종료하려면 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 @@ -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 ;; @@ -8620,11 +8620,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,13 +8644,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 @@ -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" - 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)(최신 버전을 얻으려면 Enter 키를 누르세요):" 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 @@ -8709,8 +8709,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 +8721,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 @@ -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]) @@ -8769,7 +8769,7 @@ linux_ldnmp() { ;; *) - echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -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..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8813,71 +8813,71 @@ while true; do fi done - 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}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}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}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-오늘 예약된 작업 관리 프레임워크" - 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 패널 탐색 패널${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}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}도커 가속 스테이션${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}라마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}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}비트워드 비밀번호 관리자${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}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}코마리 서버 모니터링 도구${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}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}종이 없는 문서 관리 플랫폼${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}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}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 @@ -9030,8 +9030,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,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "네자 빌드" + send_stats "搭建哪吒" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,20 +9073,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 "哪吒监控 $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 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) @@ -9143,7 +9143,7 @@ while true; do ;; 9|mail) - send_stats "우체국을 짓다" + send_stats "搭建邮局" clear install telnet local app_id="9" @@ -9153,44 +9153,44 @@ 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}}' 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 + 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" @@ -9200,7 +9200,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "계속하려면 아무 키나 누르세요..." + echo "按任意键继续..." read -n 1 -s -r -p "" install jq @@ -9219,9 +9219,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 "" @@ -9244,9 +9244,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 "" ;; @@ -9257,7 +9257,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "앱이 제거되었습니다." + echo "应用已卸载" ;; *) @@ -9291,7 +9291,7 @@ while true; do clear ip_address - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -9301,7 +9301,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 } @@ -9311,7 +9311,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "앱이 제거되었습니다." + echo "应用已卸载" } docker_app_plus @@ -9395,7 +9395,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -9409,7 +9409,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 @@ -9554,7 +9554,7 @@ while true; do ;; 19|safeline) - send_stats "천둥 웅덩이를 만들어라" + send_stats "搭建雷池" local app_id="19" local docker_name=safeline-mgt @@ -9562,20 +9562,20 @@ while true; do while true; do check_docker_app clear - echo -e "썬더 풀 서비스$check_docker" - echo "레이치(Leichi)는 창팅테크놀로지(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}}' 2>/dev/null | grep -q "$docker_name"; 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) @@ -9585,7 +9585,7 @@ while true; do add_app_id clear - echo "Leichi WAF 패널이 설치되었습니다." + echo "雷池WAF面板已经安装完成" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9598,7 +9598,7 @@ while true; do add_app_id clear - echo "Leichi WAF 패널이 업데이트되었습니다." + echo "雷池WAF面板已经更新完成" check_docker_app_ip ;; 3) @@ -9609,7 +9609,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" ;; *) @@ -9728,8 +9728,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 \ @@ -10017,7 +10017,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" @@ -10070,7 +10070,7 @@ while true; do ;; 38|xiaoya) - send_stats "Xiaoya 가족 버킷" + send_stats "小雅全家桶" clear install_docker check_disk_space 1 @@ -10274,9 +10274,9 @@ while true; do prometheus_install clear ip_address - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip - echo "초기 사용자 이름과 비밀번호는 admin입니다." + echo "初始用户名密码均为: admin" } docker_app_update() { @@ -10294,7 +10294,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "앱이 제거되었습니다." + echo "应用已卸载" } docker_app_plus @@ -10381,7 +10381,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 ;; @@ -10501,7 +10501,7 @@ while true; do docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -10516,7 +10516,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 @@ -10544,7 +10544,7 @@ while true; do docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -10559,7 +10559,7 @@ while true; do docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -10567,7 +10567,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 @@ -10588,17 +10588,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 "应用已更新" } @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "앱이 제거되었습니다." + echo "应用已卸载" } docker_app_plus @@ -10655,7 +10655,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 } @@ -10671,7 +10671,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 @@ -10933,7 +10933,7 @@ while true; do docker_rum() { - read -e -p "LibreTV 로그인 비밀번호 설정:" app_passwd + read -e -p "设置LibreTV的登录密码: " app_passwd docker run -d \ --name libretv \ @@ -10967,9 +10967,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 @@ -10985,7 +10985,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -10999,7 +10999,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 @@ -11072,8 +11072,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 \ @@ -11170,11 +11170,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) @@ -11183,17 +11183,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 } @@ -11203,7 +11203,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11288,7 +11288,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 \ @@ -11392,7 +11392,7 @@ while true; do docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -11405,7 +11405,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 @@ -11566,7 +11566,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 @@ -11618,7 +11618,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -11632,7 +11632,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 @@ -11707,8 +11707,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} \ @@ -11756,7 +11756,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -11770,7 +11770,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 @@ -11810,7 +11810,7 @@ while true; do block_container_port "$docker_name" "$ipv4_address" clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -11824,7 +11824,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 @@ -11842,9 +11842,9 @@ 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 + read -e -p "请输入 WireGuard 网段 (默认 10.13.13.0): " NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11914,18 +11914,18 @@ while true; do sleep 2 echo - echo -e "${gl_huang}모든 클라이언트 QR 코드 구성:${gl_bai}" + 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}" + 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을 다운로드하고 위의 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}${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 } @@ -11953,16 +11953,16 @@ while true; do local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" - # 디렉터리가 없으면 생성 + # 创建目录(如果不存在) mkdir -p "$(dirname "$CONFIG_FILE")" - echo "클라이언트 구성을 붙여넣고 Enter를 두 번 눌러 저장하세요." + echo "请粘贴你的客户端配置,连续按两次回车保存:" - # 변수 초기화 + # 初始化变量 input="" empty_line_count=0 - # 사용자 입력을 한 줄씩 읽습니다. + # 逐行读取用户输入 while IFS= read -r line; do if [[ -z "$line" ]]; then ((empty_line_count++)) @@ -11975,10 +11975,10 @@ while true; do fi done - # 구성 파일 쓰기 + # 写入配置文件 echo "$input" > "$CONFIG_FILE" - echo "클라이언트 구성이 다음에 저장되었습니다.$CONFIG_FILE" + echo "客户端配置已保存到 $CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12023,10 +12023,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 @@ -12043,7 +12043,7 @@ while true; do docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -12057,7 +12057,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 @@ -12097,24 +12097,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" - read -e -p "백업 데이터를 원격 서버로 전송하시겠습니까? (예/아니요):" choice + 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) @@ -12122,14 +12122,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 등 웹사이트 구축 패널의 데이터 백업은 포함되지 않습니다." + echo "注意: 目前备份仅包含docker项目,不包含宝塔,1panel等建站面板的数据备份。" break ;; esac @@ -12139,29 +12139,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 "최신 백업을 복원하려면 Enter 키를 누르고, 지정된 백업을 복원하려면 백업 파일 이름을 입력하고, 종료하려면 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 ;; @@ -12184,35 +12184,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 @@ -12220,7 +12220,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "작업공간 시작$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -12228,63 +12228,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 ;; @@ -12296,21 +12296,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 ;; @@ -12326,29 +12326,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 "다음과 같이 백그라운드에서 실행하려는 명령을 입력하십시오. 컬 -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 @@ -12373,54 +12373,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}기본 호스트 확인${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}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 @@ -12428,34 +12428,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 "현재 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 @@ -12488,7 +12488,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 @@ -12517,55 +12517,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 @@ -12584,8 +12584,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 @@ -12600,51 +12600,51 @@ 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 "------------------------" 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 "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 우선순위로 전환됨" + 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 수리" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; *) @@ -12662,43 +12662,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 "已设置自定义虚拟内存" ;; *) @@ -12711,8 +12711,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 @@ -12723,62 +12723,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" ;; @@ -12791,50 +12791,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 "" @@ -12842,46 +12842,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. 美国西部时间 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 @@ -12924,21 +12924,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 @@ -12956,11 +12956,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 @@ -12968,32 +12968,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 @@ -13001,62 +13001,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 # 跳出循环,退出菜单 @@ -13068,32 +13068,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 # 跳出循环,退出菜单 @@ -13104,24 +13104,24 @@ EOF 22) root_use - send_stats "SSH 방어" + 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 -e "SSH防御程序 $check_f2b_status" + 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) f2b_install_sshd @@ -13143,7 +13143,7 @@ EOF 9) remove fail2ban rm -rf /etc/fail2ban - echo "Fail2Ban 방어 프로그램이 제거되었습니다." + echo "Fail2Ban防御程序已卸载" break ;; *) @@ -13156,47 +13156,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 ~ @@ -13209,15 +13209,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 @@ -13230,40 +13230,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 @@ -13279,18 +13279,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 로봇 API 및 사용자 ID를 구성해야 합니다." - echo "임계값에 도달하면 경고 메시지가 사용자에게 전송됩니다." - echo -e "${gl_hui}- 트래픽에 관해서는 서버를 다시 시작하면 다시 계산됩니다 -${gl_bai}" - read -e -p "계속하시겠습니까? (예/아니요):" 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 @@ -13312,7 +13312,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 @@ -13323,21 +13323,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 @@ -13381,7 +13381,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; } @@ -13404,62 +13404,62 @@ EOF 41) clear - send_stats "메시지 보드" - echo "Technology Lion 공식 게시판을 방문해 보세요. 스크립트에 대한 아이디어가 있으시면 교환 메시지를 남겨주세요!" + send_stats "留言板" + echo "访问科技lion官方留言板,您对脚本有任何想法欢迎留言交流!" echo "https://board.kejilion.pro" - echo "공개 비밀번호: kejilion.sh" + echo "公共密码: kejilion.sh" ;; 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 "원클릭 유지 관리를 원하시나요? (예/아니요):" 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) @@ -13476,25 +13476,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 @@ -13502,7 +13502,7 @@ EOF 99) clear - send_stats "시스템을 다시 시작하세요" + send_stats "重启系统" server_reboot ;; 100) @@ -13518,32 +13518,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 @@ -13559,11 +13559,11 @@ EOF 102) clear - send_stats "기술 사자 스크립트 제거" - echo "기술 사자 스크립트 제거" + send_stats "卸载科技lion脚本" + echo "卸载科技lion脚本" echo "------------------------------------------------" - echo "kejilion 스크립트는 다른 기능에 영향을 주지 않고 완전히 제거됩니다." - read -e -p "계속하시겠습니까? (예/아니요):" choice + echo "将彻底卸载kejilion脚本,不影响你其他功能" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) @@ -13571,16 +13571,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 ;; @@ -13590,7 +13590,7 @@ EOF ;; *) - echo "입력이 잘못되었습니다!" + echo "无效的输入!" ;; esac break_end @@ -13608,187 +13608,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. 解压文件目录 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 @@ -14086,15 +14086,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 ;; *) @@ -14116,41 +14116,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}Eudemons Parlu 서버 오픈 스크립트" +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_info ;; - 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 ;; @@ -14161,13 +14161,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "Eudemons Parlu 서버 오픈 스크립트" ; 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 @@ -14175,70 +14175,70 @@ 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 제거 nano wget | k 델 나노 wget | k 나노 wget 제거 | k 나노 wget 제거" -echo "시스템 k 업데이트 업데이트 | 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 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 "도커 관리 플레인 k 도커" -echo "docker 환경 설치 k docker 설치 |k docker 설치" -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 "역방향 프록시 설치 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 즐겨찾기 | k 명령 즐겨찾기" -echo "애플리케이션 시장 관리 k app" -echo "신청번호의 빠른 관리 k app 26 | k 앱 1패널 | k 앱 npm" -echo "시스템 정보 표시 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" +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 "显示系统信息 k info" } 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|更新) @@ -14272,7 +14272,7 @@ else rsync_run) shift - send_stats "예약된 rsync 동기화" + send_stats "定时rsync同步" run_task "$@" ;; @@ -14291,7 +14291,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" @@ -14304,13 +14304,13 @@ else swap) shift - send_stats "가상 메모리를 빠르게 설정하세요" + send_stats "快速设置虚拟内存" add_swap "$@" ;; time|时区) shift - send_stats "시간대를 빠르게 설정" + send_stats "快速设置时区" set_timedate "$@" ;; @@ -14358,42 +14358,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 @@ -14403,15 +14403,15 @@ else shift case $1 in install|安装) - send_stats "도커를 빠르게 설치하세요" + send_stats "快捷安装docker" install_docker ;; ps|容器) - send_stats "빠른 컨테이너 관리" + send_stats "快捷容器管理" docker_ps ;; img|镜像) - send_stats "빠른 이미지 관리" + send_stats "快捷镜像管理" docker_image ;; *) @@ -14438,7 +14438,7 @@ else app) shift - send_stats "신청$@" + send_stats "应用$@" linux_panel "$@" ;; From 54045e99f94f19e1b2ccce8e2f6b71648d61dc45 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 18 Jan 2026 04:33:22 +0000 Subject: [PATCH 16/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202026-01-18=2004:33:22?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 22 +- jp/kejilion.sh | 2974 ++++++++++++++++++++++++------------------------ kr/kejilion.sh | 2520 ++++++++++++++++++++-------------------- tw/kejilion.sh | 1320 ++++++++++----------- 4 files changed, 3418 insertions(+), 3418 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 18792933c..6ebddb33f 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -4460,7 +4460,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}" } @@ -4510,7 +4510,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 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 } @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "Website optimization mode" + send_stats "Website optimization model" ;; 4) cd ~ @@ -5654,9 +5654,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 @@ -5698,7 +5698,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[@]}" @@ -9153,7 +9153,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" @@ -12444,7 +12444,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 "------------" @@ -13839,7 +13839,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 @@ -13873,7 +13873,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}" @@ -13990,7 +13990,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 d95435dd8..5c3e3e12a 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -5807,47 +5807,47 @@ list_connections() { } -# 添加新连接 +# 新しい接続を追加 add_connection() { send_stats "添加新连接" - echo "创建新连接示例:" - echo " - 连接名称: my_server" - echo " - IP地址: 192.168.1.100" - echo " - 用户名: root" - echo " - 端口: 22" + 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 "キーの内容を貼り付けてください (貼り付け後に 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" @@ -5856,89 +5856,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 @@ -5950,21 +5950,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 } @@ -5980,156 +5980,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 ;; @@ -6138,64 +6138,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 "- リモートディレクトリ: /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 "キーの内容を貼り付けてください (貼り付け後に 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 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,63 +6203,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 @@ -6270,51 +6270,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 @@ -6322,32 +6322,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="" @@ -6355,66 +6355,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 ;; @@ -6423,9 +6423,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "无效的选择,请重试。" ;; + *) echo "選択が無効です。もう一度お試しください。" ;; esac - read -e -p "按回车键继续..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -6440,7 +6440,7 @@ rsync_manager() { linux_info() { clear - send_stats "系统信息查询" + send_stats "システム情報の問い合わせ" ip_address @@ -6490,41 +6490,41 @@ 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" - 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 @@ -6537,111 +6537,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通信接続ツール" + 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}レンジャーファイル管理ツール" + 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 "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 @@ -6658,7 +6658,7 @@ linux_tools() { clear ranger cd ~ - send_stats "安装ranger" + send_stats "レンジャーをインストールする" ;; 13) clear @@ -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 @@ -6694,7 +6694,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "安装nano" + send_stats "ナノをインストールする" ;; @@ -6705,7 +6705,7 @@ linux_tools() { clear git --help cd ~ - send_stats "安装git" + send_stats "gitをインストールする" ;; 21) @@ -6713,67 +6713,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 "ニンベーダーをインストールする" ;; 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 "インストールされているツール名 (wgetcurlsudohtop) を入力してください:" 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) @@ -6781,7 +6781,7 @@ linux_tools() { ;; *) - echo "无效的输入!" + echo "無効な入力です!" ;; esac break_end @@ -6795,27 +6795,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 "アルパインがBBR3をオープン" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6857,21 +6857,21 @@ docker_ssh_migration() { list_backups() { local BACKUP_ROOT="/tmp" - 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 -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,28 +6892,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}検出されました$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 目录,请手动输入路径: " project_dir + read -e -p "作成ディレクトリが検出されません。パスを手動で入力してください。" 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 @@ -6921,137 +6921,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 復元:$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 -e -p "请输入要还原的备份目录: " BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + send_stats "Docker の復元" + 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 项目 --------- + # --------- 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}Compose 项目 [$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" - 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 @@ -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 @@ -7095,68 +7095,68 @@ 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 "移行するバックアップ ディレクトリを入力してください:" 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" - 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; } + 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}" } # ---------------------------- - # 主菜单 + # メインメニュー # ---------------------------- 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 -e -p "请选择: " choice + read -e -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 @@ -7173,38 +7173,38 @@ linux_docker() { while true; do clear - # send_stats "docker管理" + # 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}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 ;; @@ -7215,22 +7215,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 のバージョン" 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 "" @@ -7245,8 +7245,8 @@ linux_docker() { 5) while true; do clear - send_stats "Docker网络管理" - echo "Docker网络列表" + send_stats "Dockerネットワーク管理" + echo "Dockerネットワークリスト" echo "------------------------------------------------------------" docker network ls echo "" @@ -7270,36 +7270,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 @@ -7308,8 +7308,8 @@ linux_docker() { ;; 4) - send_stats "删除网络" - read -e -p "请输入要删除的网络名: " dockernetwork + send_stats "ネットワークを削除する" + read -e -p "削除するネットワーク名を入力してください:" dockernetwork docker network rm $dockernetwork ;; @@ -7323,29 +7323,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 @@ -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]) @@ -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,13 +7385,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) ;; @@ -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,151 +7462,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}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 三网回程延迟路由测试" - 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 トリプルネットワークバックホール回線テスト" + 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}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}ベンチパフォーマンステスト" + 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 "Yeawu ストリーミング メディアのロック解除の検出" 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 "超高速トリプルネットワーク速度テスト" 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 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 "icu/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 ;; @@ -7616,7 +7616,7 @@ linux_test() { ;; *) - echo "无效的输入!" + echo "無効な入力です!" ;; esac break_end @@ -7632,51 +7632,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}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 "インストールしてもよろしいですか? (はい/いいえ):" 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 "请输入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" \ @@ -7684,14 +7684,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 ;; @@ -7699,20 +7699,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 "続行してもよろしいですか? (はい/いいえ):" 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,28 +7724,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 - 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) @@ -7756,15 +7756,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 +7785,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 +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 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}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 軽量ブログ 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 ブログ サイトをインストールする" + 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 +7872,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 +7898,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 +7934,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 + # AppleCMS webname="苹果CMS" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "導入を開始する$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7973,24 +7973,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 +8011,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 "ユーザー名: 管理者" + 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 @@ -8075,12 +8075,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 +8088,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 +8113,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 +8126,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 +8152,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 +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 "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "現在、zip 形式のソース コード パッケージのみをアップロードできます。ソースコードパッケージを/home/web/html/に置いてください。${yuming}ディレクトリの下" + read -e -p "ダウンロード リンクを入力して、ソース コード パッケージをリモートでダウンロードすることもできます。 Enter を直接押して、リモート ダウンロードをスキップします。" url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8193,20 +8193,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 @@ -8217,15 +8217,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 +8235,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 で終わる圧縮パッケージである必要があります。 Pagoda/1panel バックアップ データのインポートをサポートするには、/home/ ディレクトリに配置してください。" + read -e -p "ダウンロード リンクを入力してバックアップ データをリモートでダウンロードすることもできます。 Enter を直接押して、リモート ダウンロードをスキップします。" url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -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 @@ -8278,12 +8278,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 +8296,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 +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" @@ -8332,11 +8332,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 +8356,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 +8379,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 +8397,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 +8431,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 +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 "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "現在、zip 形式のソース コード パッケージのみをアップロードできます。ソースコードパッケージを/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 "请输入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 @@ -8492,23 +8492,23 @@ 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 "バックアップ データをリモート サーバーに転送しますか? (はい/いいえ):" 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 /home/*.tar.gz | head -1) @@ -8516,9 +8516,9 @@ 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 "文件已传送至远程服务器home目录。" + echo "ファイルはリモート サーバーのホーム ディレクトリに転送されました。" else - echo "未找到要传送的文件。" + echo "転送するファイルが見つかりませんでした。" fi break ;; @@ -8526,7 +8526,7 @@ linux_ldnmp() { break ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "選択が無効です。Y または N を入力してください。" ;; esac done @@ -8534,9 +8534,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 @@ -8546,18 +8546,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 ;; *) @@ -8571,19 +8571,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 "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 @@ -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 ;; @@ -8620,11 +8620,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,13 +8644,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 @@ -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/ @@ -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" - 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) (Enter キーを押して最新バージョンを取得します):" version local version=${version:-8.3} cd /home/web/ cp /home/web/docker-compose.yml /home/web/docker-compose1.yml @@ -8709,8 +8709,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 +8721,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 @@ -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]) @@ -8769,7 +8769,7 @@ linux_ldnmp() { ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "選択が無効です。Y または N を入力してください。" ;; esac ;; @@ -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..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8813,71 +8813,71 @@ 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 リモート デスクトップ 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}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}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}メモウェブメモ${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}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}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}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}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主机建站管理面板" - 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}ディープシークチャット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ツールツールボックス" + 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}------------------------" - 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}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个人财务管理工具" - 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}イミッチピクチャービデオマネージャー${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}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}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}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 @@ -9030,8 +9030,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,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "搭建哪吒" + send_stats "ネザを構築する" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,20 +9073,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 "ネザモニタリング$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 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) @@ -9143,7 +9143,7 @@ while true; do ;; 9|mail) - send_stats "搭建邮局" + send_stats "郵便局を建てる" clear install telnet local app_id="9" @@ -9153,44 +9153,44 @@ 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}}' 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 + 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" @@ -9200,7 +9200,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "按任意键继续..." + echo "続行するには任意のキーを押してください..." read -n 1 -s -r -p "" install jq @@ -9219,9 +9219,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 "" @@ -9244,9 +9244,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 "" ;; @@ -9257,7 +9257,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "アプリがアンインストールされました" ;; *) @@ -9291,7 +9291,7 @@ while true; do clear ip_address - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -9301,7 +9301,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 } @@ -9311,7 +9311,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "应用已卸载" + echo "アプリがアンインストールされました" } docker_app_plus @@ -9395,7 +9395,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -9409,7 +9409,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 @@ -9554,7 +9554,7 @@ while true; do ;; 19|safeline) - send_stats "搭建雷池" + send_stats "雷のプールを作る" local app_id="19" local docker_name=safeline-mgt @@ -9562,20 +9562,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 "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 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) @@ -9585,7 +9585,7 @@ while true; do add_app_id clear - echo "雷池WAF面板已经安装完成" + echo "Leichi WAFパネルを導入しました" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9598,7 +9598,7 @@ while true; do add_app_id clear - echo "雷池WAF面板已经更新完成" + echo "Leichi WAF パネルが更新されました" check_docker_app_ip ;; 3) @@ -9609,7 +9609,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" ;; *) @@ -9728,8 +9728,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 \ @@ -10017,7 +10017,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" @@ -10070,7 +10070,7 @@ while true; do ;; 38|xiaoya) - send_stats "小雅全家桶" + send_stats "シャオヤファミリーバケツ" clear install_docker check_disk_space 1 @@ -10274,9 +10274,9 @@ while true; do prometheus_install clear ip_address - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip - echo "初始用户名密码均为: admin" + echo "初期のユーザー名とパスワードは次のとおりです: admin" } docker_app_update() { @@ -10294,7 +10294,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "应用已卸载" + echo "アプリがアンインストールされました" } docker_app_plus @@ -10381,7 +10381,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 ;; @@ -10501,7 +10501,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -10516,7 +10516,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 @@ -10544,7 +10544,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -10559,7 +10559,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -10567,7 +10567,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 @@ -10588,17 +10588,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 "アプリが更新されました" } @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "应用已卸载" + echo "アプリがアンインストールされました" } docker_app_plus @@ -10655,7 +10655,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 } @@ -10671,7 +10671,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 @@ -10933,7 +10933,7 @@ while true; do docker_rum() { - read -e -p "设置LibreTV的登录密码: " app_passwd + read -e -p "LibreTV のログイン パスワードを設定します。" app_passwd docker run -d \ --name libretv \ @@ -10967,9 +10967,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 @@ -10985,7 +10985,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -10999,7 +10999,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 @@ -11072,8 +11072,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 \ @@ -11170,11 +11170,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) @@ -11183,17 +11183,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 } @@ -11203,7 +11203,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11288,7 +11288,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 \ @@ -11392,7 +11392,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -11405,7 +11405,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 @@ -11566,7 +11566,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 @@ -11618,7 +11618,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -11632,7 +11632,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 @@ -11707,8 +11707,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} \ @@ -11756,7 +11756,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -11770,7 +11770,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 @@ -11810,7 +11810,7 @@ while true; do block_container_port "$docker_name" "$ipv4_address" clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -11824,7 +11824,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 @@ -11842,9 +11842,9 @@ 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 + read -e -p "WireGuard ネットワーク セグメントを入力してください (デフォルトは 10.13.13.0)。" NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11914,18 +11914,18 @@ while true; do sleep 2 echo - echo -e "${gl_huang}所有客户端二维码配置: ${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的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 をダウンロードし、上の 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 } @@ -11953,16 +11953,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 - # 逐行读取用户输入 + # ユーザー入力を 1 行ずつ読み取ります while IFS= read -r line; do if [[ -z "$line" ]]; then ((empty_line_count++)) @@ -11975,10 +11975,10 @@ while true; do fi done - # 写入配置文件 + # 設定ファイルの書き込み echo "$input" > "$CONFIG_FILE" - echo "客户端配置已保存到 $CONFIG_FILE" + echo "クライアント設定の保存場所$CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12023,10 +12023,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 @@ -12043,7 +12043,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -12057,7 +12057,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 @@ -12097,24 +12097,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" - read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice + echo "バックアップファイルが作成されました: /$backup_filename" + read -e -p "バックアップ データをリモート サーバーに転送しますか? (はい/いいえ):" 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) @@ -12122,14 +12122,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项目,不包含宝塔,1panel等建站面板的数据备份。" + echo "注: 現在のバックアップには Docker プロジェクトのみが含まれており、Pagoda や 1panel などの Web サイト構築パネルのデータ バックアップは含まれていません。" break ;; esac @@ -12139,29 +12139,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 "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 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 ;; @@ -12184,35 +12184,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}ワークスペース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" + 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 @@ -12220,7 +12220,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースの開始$SESSION_NAME" tmux_run ;; @@ -12228,63 +12228,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 ;; @@ -12296,21 +12296,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 ;; @@ -12326,29 +12326,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 @@ -12373,54 +12373,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}ネイティブホスト解像度${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}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}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 + 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 @@ -12428,34 +12428,34 @@ linux_Settings() { 2) clear - send_stats "设置你的登录密码" - echo "设置你的登录密码" + send_stats "ログインパスワードを設定する" + echo "ログインパスワードを設定する" passwd ;; 3) root_use - send_stats "root密码模式" + 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版本号(输入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 @@ -12488,7 +12488,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 @@ -12517,55 +12517,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 @@ -12584,8 +12584,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 @@ -12600,51 +12600,51 @@ 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 "------------------------" 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 "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 优先" + 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修复" + echo "この機能は jhb によって提供されています。ありがとう!" + send_stats "IPv6修復" ;; *) @@ -12662,43 +12662,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 "カスタム仮想メモリセット" ;; *) @@ -12711,8 +12711,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 @@ -12723,62 +12723,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" ;; @@ -12791,50 +12791,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 "" @@ -12842,46 +12842,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. 米国西部時間 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 @@ -12924,21 +12924,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 @@ -12956,11 +12956,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 @@ -12968,32 +12968,32 @@ EOF 19) root_use - send_stats "换系统更新源" + send_stats "システムアップデートソースを変更する" clear - echo "选择更新源区域" - echo "接入LinuxMirrors切换系统更新源" + echo "更新元リージョンの選択" + echo "LinuxMirror にアクセスしてシステム アップデート ソースを切り替える" 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 @@ -13001,62 +13001,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 # 跳出循环,退出菜单 @@ -13068,32 +13068,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 # 跳出循环,退出菜单 @@ -13104,24 +13104,24 @@ EOF 22) root_use - send_stats "ssh防御" + 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 -e "SSH防御プログラム$check_f2b_status" + echo "failed2ban はブルート フォース クラッキングを防ぐ 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) f2b_install_sshd @@ -13143,7 +13143,7 @@ EOF 9) remove fail2ban rm -rf /etc/fail2ban - echo "Fail2Ban防御程序已卸载" + echo "Fail2Ban 防御プログラムがアンインストールされました" break ;; *) @@ -13156,47 +13156,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 的值 + # しきい値_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 ~ @@ -13209,15 +13209,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 @@ -13230,40 +13230,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 @@ -13279,18 +13279,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 "続行してもよろしいですか? (はい/いいえ):" choice case "$choice" in [Yy]) - send_stats "电报预警启用" + send_stats "テレグラム警告が有効になっています" cd ~ install nano tmux bc jq check_crontab_installed @@ -13312,7 +13312,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 @@ -13323,21 +13323,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 @@ -13381,7 +13381,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; } @@ -13404,62 +13404,62 @@ EOF 41) clear - send_stats "留言板" - echo "访问科技lion官方留言板,您对脚本有任何想法欢迎留言交流!" + send_stats "掲示板" + echo "Technology Lion の公式掲示板をご覧ください。脚本についてのアイデアがあれば、メッセージを残して交換してください。" echo "https://board.kejilion.pro" - echo "公共密码: kejilion.sh" + echo "公開パスワード: kejilion.sh" ;; 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 "ワンクリックメンテナンスを実行してもよろしいですか? (はい/いいえ):" 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) @@ -13476,25 +13476,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 @@ -13502,7 +13502,7 @@ EOF 99) clear - send_stats "重启系统" + send_stats "システムを再起動します" server_reboot ;; 100) @@ -13518,32 +13518,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 @@ -13559,11 +13559,11 @@ EOF 102) clear - send_stats "卸载科技lion脚本" - echo "卸载科技lion脚本" + 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]) @@ -13571,16 +13571,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 ;; @@ -13590,7 +13590,7 @@ EOF ;; *) - echo "无效的输入!" + echo "無効な入力です!" ;; esac break_end @@ -13608,187 +13608,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. ファイル ディレクトリの解凍 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 "リモート サーバーのユーザー名 (デフォルトの 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 @@ -14086,15 +14086,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 ;; *) @@ -14116,41 +14116,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スクリプト・コレクション" +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}Eudemons Parlu サーバー開始スクリプト" 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_info ;; - 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 ;; @@ -14161,13 +14161,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "幻兽帕鲁开服脚本" ; 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 @@ -14175,70 +14175,70 @@ 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" -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 "显示系统信息 k info" +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 "クリーン系ジャンククリーン |きれいだ" +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 "rsync リモート同期ツール k rsync | k リモート同期" +echo "ハードディスク管理ツール k ディスク | k ハードディスクの管理" +echo "イントラネット普及率 (サーバー) k frps" +echo "イントラネット浸透率 (クライアント) k frpc" +echo "ソフトウェア起動 k start sshd | 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 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 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 ロード バランシング |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 お気に入り | k コマンドのお気に入り" +echo "アプリケーションマーケット管理kアプリ" +echo "申請番号の迅速な管理 k app 26 | kアプリ1パネル | k アプリ npm" +echo "システム情報を表示 k info" } 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|更新) @@ -14272,7 +14272,7 @@ else rsync_run) shift - send_stats "定时rsync同步" + send_stats "スケジュールされたrsync同期" run_task "$@" ;; @@ -14291,7 +14291,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" @@ -14304,13 +14304,13 @@ else swap) shift - send_stats "快速设置虚拟内存" + send_stats "仮想メモリを素早く設定する" add_swap "$@" ;; time|时区) shift - send_stats "快速设置时区" + send_stats "タイムゾーンを素早く設定" set_timedate "$@" ;; @@ -14358,42 +14358,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 @@ -14403,15 +14403,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 ;; *) @@ -14438,7 +14438,7 @@ else app) shift - send_stats "应用$@" + send_stats "申し込む$@" linux_panel "$@" ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index fcc4a0fdf..d95435dd8 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}기술 사자 스크립트 도구 상자에 오신 것을 환영합니다${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 "위의 약관에 동의하십니까? (예/아니요):" 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 @@ -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 "최소 필요 공간:${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 @@ -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 @@ -261,14 +261,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" @@ -281,43 +281,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 } @@ -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}도커 환경 설치 중...${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 @@ -502,63 +502,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]) @@ -567,28 +567,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 "------------------------------------------------------------" @@ -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) @@ -622,8 +622,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) @@ -642,44 +642,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]) @@ -688,7 +688,7 @@ while true; do [Nn]) ;; *) - echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -756,16 +756,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}" } @@ -777,27 +777,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 @@ -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 상태 확인 + # 检查当前的 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,117 +872,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" } @@ -992,7 +992,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 @@ -1002,12 +1002,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 @@ -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 규칙을 관리하는 기능 +# 管理国家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_code 的 IP 区域文件失败" continue fi @@ -1052,7 +1052,7 @@ manage_country_rules() { iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP - echo "성공적으로 차단되었습니다$country_codeIP 주소" + echo "已成功阻止 $country_code 的 IP 地址" rm "${country_code,,}.zone" ;; @@ -1062,7 +1062,7 @@ manage_country_rules() { fi if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "오류: 다운로드$country_codeIP 영역 파일 실패" + echo "错误:下载 $country_code 的 IP 区域文件失败" 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_code 的 IP 地址" rm "${country_code,,}.zone" ;; @@ -1086,11 +1086,11 @@ manage_country_rules() { ipset destroy "$ipset_name" fi - echo "성공적으로 제거되었습니다$country_codeIP 주소 제한" + echo "已成功解除 $country_code 的 IP 地址限制" ;; *) - echo "사용법: prepare_country_rules {block|allow|unblock} " + echo "用法: manage_country_rules {block|allow|unblock} " ;; esac done @@ -1111,42 +1111,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. 阻止指定国家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 @@ -1159,10 +1159,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 @@ -1175,40 +1175,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 @@ -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_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" ;; *) @@ -1250,23 +1250,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 - # 이전 /swap 파일 삭제 + # 删除旧的 /swapfile rm -f /swapfile - # 새로운 스왑 파티션 생성 + # 创建新的 swap 分区 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 @@ -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}" @@ -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 @@ -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 @@ -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,15 +1446,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 "" } @@ -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" @@ -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 "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 @@ -1542,7 +1542,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 @@ -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,8 +1616,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}完成" } @@ -1636,11 +1636,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" } @@ -1650,29 +1650,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의 캐시를 지워야 합니까? (예/아니요):" 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 "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" \ @@ -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 @@ -1696,28 +1696,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 @@ -1733,23 +1733,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 @@ -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" - # "HappyPublishing"이 포함된 줄 앞에 새 정의를 삽입합니다. + # 插入新定义,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_MEMORY_LIMIT', '$MEMORY_LIMIT');\ndefine('WP_MAX_MEMORY_LIMIT', '$MAX_MEMORY_LIMIT');" \ ' /Happy publishing/ { @@ -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" - # "HappyPublishing"이 포함된 줄 앞에 새 정의를 삽입합니다. + # 插入新定义,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /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,11 +1881,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 @@ -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,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 @@ -1983,31 +1983,31 @@ nginx_gzip() { web_security() { - send_stats "LDNMP 환경 방어" + send_stats "LDNMP环境防御" while true; do check_f2b_status 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 "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 @@ -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 "클라우드플레어 모드" - 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 @@ -2107,21 +2107,21 @@ 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后台,站点-安全性-事件中查看拦截记录" ;; 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 @@ -2138,23 +2138,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) @@ -2179,10 +2179,10 @@ 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 ';') -# 값에 따라 모드 정보 설정 +# 根据值设置模式信息 if [ "$current_value" = "8" ]; then mode_info=" 高性能模式" else @@ -2198,21 +2198,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 @@ -2228,33 +2228,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 @@ -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 @@ -2278,23 +2278,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 @@ -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 @@ -2316,7 +2316,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP 환경이 고성능 모드로 설정되었습니다." + echo "LDNMP环境已设置成 高性能模式" ;; 3) @@ -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 # } @@ -2386,7 +2386,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "방문 주소:" +echo "访问地址:" ip_address @@ -2424,31 +2424,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 +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,34 +2477,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 @@ -2514,7 +2514,7 @@ block_container_port() { fi - echo "IP+포트가 서비스 접근을 차단했습니다." + echo "已阻止IP+端口访问该服务" save_iptables_rules } @@ -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 @@ -2554,17 +2554,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 +2575,7 @@ clear_container_rules() { fi - echo "IP+포트로 서비스 접속이 허용되었습니다" + echo "已允许IP+端口访问该服务" save_iptables_rules } @@ -2589,25 +2589,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 +2616,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 +2648,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,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. 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) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter를 누르면 기본적으로 사용됩니다.${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 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 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 "https://가 없는 도메인 이름 형식 example.com" + 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,19 +2860,19 @@ 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) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "애플리케이션 외부 서비스 포트를 입력하고 Enter를 누르면 기본적으로 사용됩니다.${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 "https://가 없는 도메인 이름 형식 example.com" + 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" @@ -3063,11 +3063,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 +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 @@ -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,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 @@ -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,16 +3185,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 +3206,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 @@ -3247,17 +3247,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 @@ -3280,14 +3280,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 @@ -3340,12 +3340,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//') @@ -3358,35 +3358,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 @@ -3395,15 +3395,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') @@ -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 "연결된 사이트 만들기" - 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 @@ -3459,25 +3459,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 @@ -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 ;; @@ -3518,21 +3518,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 @@ -3541,20 +3541,20 @@ while true; do panel_app_install add_app_id - send_stats "${panelname}설치하다" + send_stats "${panelname}安装" ;; 2) panel_app_manage 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 @@ -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,17 +3620,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 @@ -3640,9 +3640,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 @@ -3662,17 +3662,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를 입력하십시오. [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} @@ -3682,8 +3682,8 @@ remote_port = ${remote_port} EOF - # 생성된 정보를 출력 - echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." + # 输出生成的信息 + echo "服务 $service_name 已成功添加到 frpc.toml" docker restart frpc @@ -3694,12 +3694,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 @@ -3709,7 +3709,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # 헤더 인쇄 + # 打印表头 printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -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, \ @@ -3739,11 +3739,11 @@ list_forwarding_services() { type } - # 현재 서비스 이름 업데이트 + # 更新当前服务名称 if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 이전 값 지우기 + # 清除之前的值 local_ip="" local_port="" remote_port="" @@ -3772,7 +3772,7 @@ list_forwarding_services() { } END { - # 마지막 서비스에 대한 정보 인쇄 + # 打印最后一个服务的信息 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 @@ -3804,18 +3804,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 @@ -3824,7 +3824,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}" @@ -3851,7 +3851,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRP 서버" + send_stats "FRP服务端" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3859,25 +3859,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 @@ -3885,7 +3885,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 +3895,7 @@ frps_panel() { donlond_frp frps add_app_id - echo "FRP 서버가 업데이트되었습니다" + echo "FRP服务端已经更新完成" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3906,37 +3906,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 "https://가 없는 도메인 이름 형식 example.com" + 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服务状态" ;; *) @@ -3949,7 +3949,7 @@ frps_panel() { frpc_panel() { - send_stats "FRP 클라이언트" + send_stats "FRP客户端" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3957,10 +3957,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 @@ -3968,13 +3968,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 @@ -3982,7 +3982,7 @@ frpc_panel() { configure_frpc add_app_id - echo "FRP 클라이언트가 설치되었습니다" + echo "FRP客户端已经安装完成" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -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,68 +4049,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 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 제거 중..." - 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 \ @@ -4118,31 +4118,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" ;; *) @@ -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 @@ -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 @@ -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,13 +4243,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 @@ -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 "사용하지 않는 종속성을 정리합니다..." + 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 @@ -4327,26 +4327,26 @@ 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 주소" + 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" @@ -4354,7 +4354,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,14 +4362,14 @@ 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 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이 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/' \ @@ -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" @@ -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 @@ -4460,17 +4460,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 @@ -4488,7 +4488,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}" } @@ -4497,26 +4497,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}ROOT 로그인 설정이 완료되었습니다!${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 @@ -4527,41 +4527,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" @@ -4577,21 +4577,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 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 + 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 @@ -4599,49 +4599,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 "우분투 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 @@ -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 @@ -4666,7 +4666,7 @@ dd_xitong() { ;; 23) - send_stats "alma10 재설치" + send_stats "重装alma10" dd_xitong_3 bash reinstall.sh almalinux 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 @@ -4714,7 +4714,7 @@ dd_xitong() { ;; 29) - send_stats "centos10 재설치" + send_stats "重装centos10" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4722,7 +4722,7 @@ dd_xitong() { ;; 30) - send_stats "centos9 재설치" + send_stats "重装centos9" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4730,7 +4730,7 @@ dd_xitong() { ;; 31) - send_stats "알파인 재설치" + send_stats "重装alpine" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4738,7 +4738,7 @@ dd_xitong() { ;; 32) - send_stats "아치 재설치" + send_stats "重装arch" dd_xitong_3 bash reinstall.sh arch reboot @@ -4746,7 +4746,7 @@ dd_xitong() { ;; 33) - send_stats "칼리 재설치" + send_stats "重装kali" dd_xitong_3 bash reinstall.sh kali reboot @@ -4754,7 +4754,7 @@ dd_xitong() { ;; 34) - send_stats "openeuler 다시 설치" + send_stats "重装openeuler" dd_xitong_3 bash reinstall.sh openeuler reboot @@ -4762,7 +4762,7 @@ dd_xitong() { ;; 35) - send_stats "Openuse 다시 설치" + send_stats "重装opensuse" dd_xitong_3 bash reinstall.sh opensuse reboot @@ -4770,7 +4770,7 @@ dd_xitong() { ;; 36) - send_stats "Feiniu 재설치" + send_stats "重装飞牛" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4778,7 +4778,7 @@ dd_xitong() { ;; 41) - send_stats "윈도우 11 재설치" + send_stats "重装windows11" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -4787,14 +4787,14 @@ dd_xitong() { 42) dd_xitong_2 - send_stats "윈도우 10 재설치" + 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 @@ -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 "윈도우 서버 22 재설치" + send_stats "重装windows server 22" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot @@ -4818,7 +4818,7 @@ dd_xitong() { ;; 46) - send_stats "윈도우 서버 19 재설치" + send_stats "重装windows server 19" dd_xitong_2 bash InstallNET.sh -windows 2019 -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 "------------------------" - 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) @@ -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 "데비안/우분투만 지원" - echo "데이터를 백업해 주시면 Linux 커널을 업그레이드하고 BBR3을 활성화하겠습니다." + echo "仅支持Debian/Ubuntu" + echo "请备份数据,将为你升级Linux内核开启BBR3" echo "------------------------------------------------" - read -e -p "계속하시겠습니까? (예/아니요):" choice + read -e -p "确定继续吗?(Y/N): " 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+') @@ -4949,17 +4949,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 +4968,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 } @@ -5009,37 +5009,37 @@ elrepo_install() { elrepo() { root_use - send_stats "Red Hat 커널 관리" + 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 "Red Hat 커널 제거" + echo "elrepo内核已卸载。重启后生效" + send_stats "卸载红帽内核" server_reboot ;; @@ -5052,26 +5052,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 "계속하시겠습니까? (예/아니요):" 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 +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 \ @@ -5092,19 +5092,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 +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 run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5122,8 +5122,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}" } @@ -5135,23 +5135,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 @@ -5160,7 +5160,7 @@ clamav() { ;; 2) - send_stats "중요한 디렉토리 스캔" + send_stats "重要目录扫描" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5168,8 +5168,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 +5186,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 +5212,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 +5253,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 +5294,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 +5336,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 +5356,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 @@ -5438,7 +5438,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 @@ -5447,17 +5447,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 } @@ -5467,29 +5467,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 +5511,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 +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}#" @@ -5535,9 +5535,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 +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 "활성화한 후에는 중요한 파일이 실수로 삭제되는 것을 방지하기 위해 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 +5615,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 +5623,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 "휴지통을 비우시겠습니까? [예/아니요]:" confirm + read -e -p "确认清空回收站?[y/n]: " confirm if [[ "$confirm" == "y" ]]; then trash-empty - echo "휴지통이 비워졌습니다." + echo "回收站已清空。" fi ;; *) @@ -5650,23 +5650,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 "- Enter를 눌러 기본 디렉터리(/etc/usr/home)를 사용합니다." - read -r -p "백업할 디렉터리를 입력하십시오(여러 디렉터리를 공백으로 구분하고 Enter를 눌러 기본 디렉터리를 사용하십시오)." 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" # 配置文件和软件包配置 @@ -5674,119 +5674,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 } @@ -5798,56 +5798,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를 두 번 누르세요)." + 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" @@ -5856,89 +5856,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 @@ -5950,21 +5950,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 } @@ -5980,156 +5980,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? (예/아니요):" 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 ;; @@ -6138,64 +6138,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 "- 원격 디렉터리: /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 "원격 user@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를 두 번 누르세요)." + 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" @@ -6203,63 +6203,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 @@ -6270,51 +6270,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 @@ -6322,32 +6322,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="" @@ -6355,66 +6355,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 ;; @@ -6423,9 +6423,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "선택이 잘못되었습니다. 다시 시도해 주세요." ;; + *) echo "无效的选择,请重试。" ;; esac - read -e -p "계속하려면 Enter를 누르세요..." + read -e -p "按回车键继续..." done } @@ -6440,7 +6440,7 @@ rsync_manager() { linux_info() { clear - send_stats "시스템 정보 쿼리" + send_stats "系统信息查询" ip_address @@ -6490,41 +6490,41 @@ 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" - 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 @@ -6537,111 +6537,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 통신 연결 도구" - 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}레인저 파일 관리 도구" - 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) @@ -6649,7 +6649,7 @@ linux_tools() { install btop clear btop - send_stats "btop 설치" + send_stats "安装btop" ;; 12) clear @@ -6658,7 +6658,7 @@ linux_tools() { clear ranger cd ~ - send_stats "레인저 설치" + send_stats "安装ranger" ;; 13) clear @@ -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 @@ -6694,7 +6694,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "나노 설치" + send_stats "安装nano" ;; @@ -6705,7 +6705,7 @@ linux_tools() { clear git --help cd ~ - send_stats "자식 설치" + send_stats "安装git" ;; 21) @@ -6713,67 +6713,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 "닌베이더 설치" + 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 컬 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) @@ -6781,7 +6781,7 @@ linux_tools() { ;; *) - echo "입력이 잘못되었습니다!" + echo "无效的输入!" ;; esac break_end @@ -6795,27 +6795,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 @@ -6857,21 +6857,21 @@ docker_ssh_migration() { list_backups() { local BACKUP_ROOT="/tmp" - 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 "도커 백업" + 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 "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " 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,28 +6892,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도커 작성 컨테이너입니다${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 -e -p "작성 디렉터리가 감지되지 않습니다. 경로를 수동으로 입력하세요." project_dir + 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}Compose 项目 [$project_name] 已备份过,跳过重复打包...${NC}" continue fi @@ -6921,137 +6921,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 恢复: $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}" + 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 "도커 복원" - read -e -p "복원할 백업 디렉터리를 입력하십시오:" BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉터리가 존재하지 않습니다.${NC}"; return; } + send_stats "Docker还原" + 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 프로젝트 복원 우선순위 지정 --------- + # --------- 优先还原 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 프로젝트의 컨테이너가 이미 실행 중인지 확인하세요. + # 检查该 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 -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" - 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 @@ -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 @@ -7095,68 +7095,68 @@ docker_ssh_migration() { # ---------------------------- - # 이주하다 + # 迁移 # ---------------------------- migrate_docker() { - send_stats "도커 마이그레이션" + 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 - 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" - 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; } + 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}" } # ---------------------------- - # 메인 메뉴 + # 主菜单 # ---------------------------- 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. 도커 프로젝트 백업" - echo -e "2. 도커 프로젝트 마이그레이션" - echo -e "3. 도커 프로젝트 복원" - 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 -e -p "선택하세요:" choice + read -e -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 @@ -7173,29 +7173,29 @@ linux_docker() { while true; do clear - # send_stats "도커 관리" - 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 전역 상태 보기${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}清理无用的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}------------------------${gl_bai}" diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 05b2db1f1..40c81a274 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -9563,19 +9563,19 @@ while true; do check_docker_app clear echo -e "雷池服務$check_docker" - echo "雷池是長亭科技開發的WAF站點防火牆程序面板,可以反代站點進行自動化防禦" - echo "視頻介紹: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" + 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 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) @@ -9585,7 +9585,7 @@ while true; do add_app_id clear - echo "雷池WAF面板已經安裝完成" + echo "雷池WAF面板已经安装完成" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9598,7 +9598,7 @@ while true; do add_app_id clear - echo "雷池WAF面板已經更新完成" + echo "雷池WAF面板已经更新完成" check_docker_app_ip ;; 3) @@ -9609,7 +9609,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" ;; *) @@ -9728,8 +9728,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 \ @@ -10017,7 +10017,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" @@ -10274,9 +10274,9 @@ while true; do prometheus_install clear ip_address - echo "已經安裝完成" + echo "已经安装完成" check_docker_app_ip - echo "初始用戶名密碼均為: admin" + echo "初始用户名密码均为: admin" } docker_app_update() { @@ -10294,7 +10294,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "應用已卸載" + echo "应用已卸载" } docker_app_plus @@ -10381,7 +10381,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 ;; @@ -10501,7 +10501,7 @@ while true; do docker compose up -d clear - echo "已經安裝完成" + echo "已经安装完成" check_docker_app_ip } @@ -10516,7 +10516,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 @@ -10544,7 +10544,7 @@ while true; do docker compose up -d clear - echo "已經安裝完成" + echo "已经安装完成" check_docker_app_ip } @@ -10559,7 +10559,7 @@ while true; do docker compose up -d clear - echo "已經安裝完成" + echo "已经安装完成" check_docker_app_ip } @@ -10567,7 +10567,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 @@ -10588,17 +10588,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 "应用已更新" } @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "應用已卸載" + echo "应用已卸载" } docker_app_plus @@ -10655,7 +10655,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 } @@ -10671,7 +10671,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 @@ -10933,7 +10933,7 @@ while true; do docker_rum() { - read -e -p "設置LibreTV的登錄密碼:" app_passwd + read -e -p "设置LibreTV的登录密码: " app_passwd docker run -d \ --name libretv \ @@ -10967,9 +10967,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 @@ -10985,7 +10985,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "已經安裝完成" + echo "已经安装完成" check_docker_app_ip } @@ -10999,7 +10999,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 @@ -11072,8 +11072,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 \ @@ -11170,11 +11170,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) @@ -11183,17 +11183,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 } @@ -11203,7 +11203,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11288,7 +11288,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 \ @@ -11392,7 +11392,7 @@ while true; do docker compose up -d clear - echo "已經安裝完成" + echo "已经安装完成" check_docker_app_ip } @@ -11405,7 +11405,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 @@ -11566,7 +11566,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 @@ -11618,7 +11618,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "已經安裝完成" + echo "已经安装完成" check_docker_app_ip } @@ -11632,7 +11632,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 @@ -11707,8 +11707,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} \ @@ -11756,7 +11756,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "已經安裝完成" + echo "已经安装完成" check_docker_app_ip } @@ -11770,7 +11770,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 @@ -11810,7 +11810,7 @@ while true; do block_container_port "$docker_name" "$ipv4_address" clear - echo "已經安裝完成" + echo "已经安装完成" check_docker_app_ip } @@ -11824,7 +11824,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 @@ -11842,9 +11842,9 @@ 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 + read -e -p "请输入 WireGuard 网段 (默认 10.13.13.0): " NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11914,18 +11914,18 @@ while true; do sleep 2 echo - echo -e "${gl_huang}所有客戶端二維碼配置:${gl_bai}" + 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}" + 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}" - 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 } @@ -11953,16 +11953,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++)) @@ -11975,10 +11975,10 @@ while true; do fi done - # 寫入配置文件 + # 写入配置文件 echo "$input" > "$CONFIG_FILE" - echo "客戶端配置已保存到$CONFIG_FILE" + echo "客户端配置已保存到 $CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12023,10 +12023,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 @@ -12043,7 +12043,7 @@ while true; do docker compose up -d clear - echo "已經安裝完成" + echo "已经安装完成" check_docker_app_ip } @@ -12057,7 +12057,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 @@ -12097,24 +12097,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" - 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 "目標服務器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) @@ -12122,14 +12122,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項目,不包含寶塔,1panel等建站面板的數據備份。" + echo "注意: 目前备份仅包含docker项目,不包含宝塔,1panel等建站面板的数据备份。" break ;; esac @@ -12139,29 +12139,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 ;; @@ -12184,35 +12184,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 @@ -12220,7 +12220,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "啟動工作區$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -12228,63 +12228,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 ;; @@ -12296,21 +12296,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 ;; @@ -12326,29 +12326,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 @@ -12373,54 +12373,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 @@ -12428,13 +12428,13 @@ linux_Settings() { 2) clear - send_stats "設置你的登錄密碼" - echo "設置你的登錄密碼" + send_stats "设置你的登录密码" + echo "设置你的登录密码" passwd ;; 3) root_use - send_stats "root密碼模式" + send_stats "root密码模式" add_sshpasswd ;; @@ -12442,20 +12442,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 @@ -12517,17 +12517,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) @@ -12538,19 +12538,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端口已修改" @@ -12559,13 +12559,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 @@ -12584,8 +12584,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 @@ -12606,45 +12606,45 @@ 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}優先" + 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) 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修復" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; *) @@ -12662,43 +12662,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 "已设置自定义虚拟内存" ;; *) @@ -12711,8 +12711,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 @@ -12723,24 +12723,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" @@ -12748,14 +12748,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 @@ -12764,21 +12764,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" ;; @@ -12791,50 +12791,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 "" @@ -12842,46 +12842,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 @@ -12924,21 +12924,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 @@ -12956,11 +12956,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 @@ -12968,24 +12968,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) @@ -13001,62 +13001,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 # 跳出循环,退出菜单 @@ -13071,29 +13071,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 # 跳出循环,退出菜单 @@ -13104,24 +13104,24 @@ EOF 22) root_use - send_stats "ssh防禦" + 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 -e "SSH防御程序 $check_f2b_status" + 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) f2b_install_sshd @@ -13143,7 +13143,7 @@ EOF 9) remove fail2ban rm -rf /etc/fail2ban - echo "Fail2Ban防禦程序已卸載" + echo "Fail2Ban防御程序已卸载" break ;; *) @@ -13156,47 +13156,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 ~ @@ -13209,15 +13209,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 @@ -13230,40 +13230,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 @@ -13279,18 +13279,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 @@ -13323,21 +13323,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 @@ -13381,7 +13381,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; } @@ -13405,61 +13405,61 @@ EOF 41) clear send_stats "留言板" - echo "訪問科技lion官方留言板,您對腳本有任何想法歡迎留言交流!" + echo "访问科技lion官方留言板,您对脚本有任何想法欢迎留言交流!" echo "https://board.kejilion.pro" - echo "公共密碼: kejilion.sh" + echo "公共密码: kejilion.sh" ;; 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) @@ -13476,25 +13476,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 @@ -13502,7 +13502,7 @@ EOF 99) clear - send_stats "重啟系統" + send_stats "重启系统" server_reboot ;; 100) @@ -13518,32 +13518,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 @@ -13559,11 +13559,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]) @@ -13571,7 +13571,7 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "腳本已卸載,再見!" + echo "脚本已卸载,再见!" break_end clear exit @@ -13580,7 +13580,7 @@ EOF echo "已取消" ;; *) - echo "無效的選擇,請輸入 Y 或 N。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -13590,7 +13590,7 @@ EOF ;; *) - echo "無效的輸入!" + echo "无效的输入!" ;; esac break_end @@ -13613,182 +13613,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 @@ -14086,15 +14086,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 ;; *) @@ -14116,37 +14116,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_info ;; - 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 ;; @@ -14161,13 +14161,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 @@ -14175,70 +14175,70 @@ 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 "内核调优面板 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" -echo "docker環境安裝 k docker install |k docker 安裝" +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 info" +echo "命令收藏夹 k fav | k 命令收藏夹" +echo "应用市场管理 k app" +echo "应用编号快捷管理 k app 26 | k app 1panel | k app npm" +echo "显示系统信息 k info" } 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|更新) @@ -14272,7 +14272,7 @@ else rsync_run) shift - send_stats "定時rsync同步" + send_stats "定时rsync同步" run_task "$@" ;; @@ -14291,7 +14291,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" @@ -14304,13 +14304,13 @@ else swap) shift - send_stats "快速設置虛擬內存" + send_stats "快速设置虚拟内存" add_swap "$@" ;; time|时区) shift - send_stats "快速設置時區" + send_stats "快速设置时区" set_timedate "$@" ;; @@ -14358,42 +14358,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 @@ -14403,7 +14403,7 @@ else shift case $1 in install|安装) - send_stats "快捷安裝docker" + send_stats "快捷安装docker" install_docker ;; ps|容器) @@ -14411,7 +14411,7 @@ else docker_ps ;; img|镜像) - send_stats "快捷鏡像管理" + send_stats "快捷镜像管理" docker_image ;; *) @@ -14438,7 +14438,7 @@ else app) shift - send_stats "應用$@" + send_stats "应用$@" linux_panel "$@" ;; From de330f28a6ee7acea7668cb407686d778f5dacdb Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 25 Jan 2026 05:04:47 +0000 Subject: [PATCH 17/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202026-01-25=2005:04:47?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 18 +- jp/kejilion.sh | 1776 +++++++++--------- kr/kejilion.sh | 4732 ++++++++++++++++++++++++------------------------ tw/kejilion.sh | 1320 +++++++------- 4 files changed, 3923 insertions(+), 3923 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 6ebddb33f..be180e5f2 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -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 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 @@ -4460,7 +4460,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}" } @@ -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}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 } @@ -6119,7 +6119,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 @@ -7112,7 +7112,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 @@ -9153,7 +9153,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" @@ -12636,8 +12636,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 5c3e3e12a..cab55a2f4 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}テクノロジー ライオン スクリプト ツールボックスへようこそ${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 @@ -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 "最小需求空间: ${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 @@ -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 @@ -261,14 +261,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" @@ -281,43 +281,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 } @@ -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}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 @@ -502,63 +502,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]) @@ -567,28 +567,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 "------------------------------------------------------------" @@ -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) @@ -622,8 +622,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) @@ -642,44 +642,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]) @@ -688,7 +688,7 @@ while true; do [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "選択が無効です。Y または N を入力してください。" ;; esac ;; @@ -756,16 +756,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}" } @@ -777,27 +777,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 @@ -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 状态 + # 現在の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,117 +872,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がブロックされました" } @@ -992,7 +992,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 @@ -1002,12 +1002,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 @@ -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_code 的 IP 区域文件失败" + echo "エラー: ダウンロード$country_codeIPゾーンファイルが失敗しました" continue fi @@ -1052,7 +1052,7 @@ manage_country_rules() { iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP - echo "已成功阻止 $country_code 的 IP 地址" + echo "正常にブロックされました$country_codeIPアドレス" rm "${country_code,,}.zone" ;; @@ -1062,7 +1062,7 @@ manage_country_rules() { fi if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" + 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_code 的 IP 地址" + echo "正常に許可されました$country_codeIPアドレス" rm "${country_code,,}.zone" ;; @@ -1086,11 +1086,11 @@ manage_country_rules() { ipset destroy "$ipset_name" fi - echo "已成功解除 $country_code 的 IP 地址限制" + echo "正常に削除されました$country_codeIPアドレス制限" ;; *) - echo "用法: manage_country_rules {block|allow|unblock} " + echo "使用法: manage_country_rules {block|allow|unblock} " ;; esac done @@ -1111,42 +1111,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. 指定した国の IP をブロックする 16. 指定した国の IP のみを許可する" + echo "17. 指定国における知的財産制限を解除する" 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 @@ -1159,10 +1159,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 @@ -1175,40 +1175,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 @@ -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_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" ;; *) @@ -1250,23 +1250,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 @@ -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 @@ -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}" @@ -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 @@ -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 @@ -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,15 +1446,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 "" } @@ -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" @@ -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 "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 @@ -1542,7 +1542,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 @@ -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,8 +1616,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}仕上げる" } @@ -1636,11 +1636,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" } @@ -1650,29 +1650,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_FILECF 情報は後で変更できます。" + 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 "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 @@ -1696,28 +1696,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 @@ -1733,23 +1733,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 @@ -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,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" 的行前 + # 「Happy Publishing」を含む行の前に新しい定義を挿入します。 awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /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,11 +1881,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 @@ -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,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 @@ -1983,31 +1983,31 @@ nginx_gzip() { web_security() { - send_stats "LDNMP环境防御" + send_stats "LDNMP環境防御" while true; do check_f2b_status check_waf_status check_cf_mode clear - echo -e "服务器网站防御程序 ${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. 查看网站拦截记录" - echo "7. 查看防御规则列表 8. 查看日志实时监控" + echo "5. SSH 傍受記録の表示 6. Web サイト傍受記録の表示" + echo "7. 防御ルールのリストを表示します。 8. リアルタイム監視のログを表示します。" echo "------------------------" - echo "11. 配置拦截参数 12. 清除所有拉黑的IP" + 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防御" + 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 @@ -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模式" - echo "到cf后台右上角我的个人资料,选择左侧API令牌,获取Global API Key" + send_stats "クラウドフレアモード" + 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 @@ -2107,21 +2107,21 @@ 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}" + 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 -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 @@ -2138,23 +2138,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) @@ -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 @@ -2198,21 +2198,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 @@ -2228,33 +2228,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 @@ -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 @@ -2278,23 +2278,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 @@ -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 @@ -2316,7 +2316,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP环境已设置成 高性能模式" + echo "LDNMP 環境が高パフォーマンス モードに設定されている" ;; 3) @@ -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 # } @@ -2386,7 +2386,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "访问地址:" +echo "訪問先住所:" ip_address @@ -2424,31 +2424,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 @@ -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,34 +2477,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 @@ -2514,7 +2514,7 @@ block_container_port() { fi - echo "已阻止IP+端口访问该服务" + echo "IP+ポートはサービスへのアクセスをブロックされています" save_iptables_rules } @@ -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 @@ -2554,17 +2554,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 +2575,7 @@ clear_container_rules() { fi - echo "已允许IP+端口访问该服务" + echo "IP+ポートによるサービスへのアクセスが許可されました" save_iptables_rules } @@ -2589,25 +2589,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 +2616,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 +2648,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,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. 阻止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) 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,12 +2771,12 @@ while true; do 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 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,19 +2860,19 @@ 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) 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,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" @@ -3063,11 +3063,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 +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 @@ -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,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 @@ -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,16 +3185,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 +3206,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 @@ -3247,17 +3247,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 @@ -3280,14 +3280,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 @@ -3340,12 +3340,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//') @@ -3358,35 +3358,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 @@ -3395,15 +3395,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') @@ -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" {} + @@ -3442,10 +3442,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 @@ -3459,25 +3459,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 @@ -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 "官网介绍: $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 @@ -3541,20 +3541,20 @@ while true; do panel_app_install add_app_id - send_stats "${panelname}安装" + send_stats "${panelname}インストール" ;; 2) panel_app_manage 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 @@ -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,17 +3620,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 @@ -3640,9 +3640,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 @@ -3662,17 +3662,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 を入力してください [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 + 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_name 已成功添加到 frpc.toml" + # 生成された情報を出力する + echo "仕える$service_namefrpc.toml に正常に追加されました" docker restart frpc @@ -3694,12 +3694,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 @@ -3709,7 +3709,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # 打印表头 + # ヘッダーを印刷します printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -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, \ @@ -3739,11 +3739,11 @@ list_forwarding_services() { type } - # 更新当前服务名称 + # 現在のサービス名を更新します if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 清除之前的值 + # 前回の値をクリア local_ip="" local_port="" remote_port="" @@ -3772,7 +3772,7 @@ list_forwarding_services() { } END { - # 打印最后一个服务的信息 + # 最後のサービスに関する情報を出力します 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 @@ -3804,18 +3804,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 @@ -3824,7 +3824,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}" @@ -3851,7 +3851,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRP服务端" + send_stats "FRPサーバー" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3859,25 +3859,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 @@ -3885,7 +3885,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 +3895,7 @@ frps_panel() { donlond_frp frps add_app_id - echo "FRP服务端已经更新完成" + echo "FRPサーバーを更新しました" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3906,37 +3906,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サービスステータスが更新されました" ;; *) @@ -3949,7 +3949,7 @@ frps_panel() { frpc_panel() { - send_stats "FRP客户端" + send_stats "FRPクライアント" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3957,10 +3957,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 @@ -3968,13 +3968,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 @@ -3982,7 +3982,7 @@ frpc_panel() { configure_frpc add_app_id - echo "FRP客户端已经安装完成" + echo "FRPクライアントがインストールされています" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -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,68 +4049,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. 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 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..." - 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 \ @@ -4118,31 +4118,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" ;; *) @@ -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 @@ -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 @@ -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,13 +4243,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 @@ -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 "清理未使用的依赖..." + 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 @@ -4327,26 +4327,26 @@ 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地址" + 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" @@ -4354,7 +4354,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,14 +4362,14 @@ 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 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 设置为 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/' \ @@ -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" @@ -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 @@ -4460,17 +4460,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 @@ -4488,7 +4488,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}" } @@ -4497,26 +4497,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 @@ -4527,41 +4527,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" @@ -4577,21 +4577,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 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 + 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,49 +4599,49 @@ 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 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 @@ -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 @@ -4666,7 +4666,7 @@ dd_xitong() { ;; 23) - send_stats "重装alma10" + send_stats "alma10を再インストールする" dd_xitong_3 bash reinstall.sh almalinux 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 @@ -4714,7 +4714,7 @@ dd_xitong() { ;; 29) - send_stats "重装centos10" + send_stats "centos10を再インストールする" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4722,7 +4722,7 @@ dd_xitong() { ;; 30) - send_stats "重装centos9" + send_stats "centos9を再インストールする" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4730,7 +4730,7 @@ dd_xitong() { ;; 31) - send_stats "重装alpine" + send_stats "アルパインを再インストールする" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4738,7 +4738,7 @@ dd_xitong() { ;; 32) - send_stats "重装arch" + send_stats "アーチを再インストールする" dd_xitong_3 bash reinstall.sh arch reboot @@ -4746,7 +4746,7 @@ dd_xitong() { ;; 33) - send_stats "重装kali" + send_stats "kaliを再インストールする" dd_xitong_3 bash reinstall.sh kali reboot @@ -4754,7 +4754,7 @@ dd_xitong() { ;; 34) - send_stats "重装openeuler" + send_stats "オープニューラーを再インストールする" dd_xitong_3 bash reinstall.sh openeuler 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 "重装windows10" + send_stats "Windows 10を再インストールする" 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 @@ -4802,7 +4802,7 @@ dd_xitong() { ;; 44) - send_stats "重装windows server 25" + send_stats "Windowsサーバー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 "Windowsサーバー22を再インストールします" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" 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 @@ -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 @@ -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 "------------------------" - 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) @@ -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内核开启BBR3" + echo "Debian/Ubuntu のみをサポートします" + 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+') @@ -4949,17 +4949,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 +4968,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 } @@ -5009,37 +5009,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 "------------------------" - 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 "Red Hat カーネルをアンインストールする" server_reboot ;; @@ -5052,26 +5052,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 "続行してもよろしいですか? (はい/いいえ):" 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 @@ -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 \ @@ -5092,19 +5092,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 +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 \ @@ -5122,8 +5122,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}" } @@ -5135,23 +5135,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 @@ -5160,7 +5160,7 @@ clamav() { ;; 2) - send_stats "重要目录扫描" + send_stats "重要なディレクトリのスキャン" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5168,8 +5168,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 +5186,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 +5212,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 @@ -5253,36 +5253,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 @@ -5294,37 +5294,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 } -# 网站搭建优化函数 +# Webサイト構築最適化機能 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 +5336,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 @@ -5356,62 +5356,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 サイト最適化モード: 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 @@ -5438,7 +5438,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 @@ -5447,17 +5447,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 } @@ -5467,29 +5467,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 +5511,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 +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}#" @@ -5535,9 +5535,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 +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 "启用后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 +5615,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 +5623,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 ;; *) @@ -5650,23 +5650,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 "- Enter キーを押して、デフォルトのディレクトリ (/etc /usr /home) を使用します。" + read -r -p "バックアップするディレクトリを入力してください (複数のディレクトリをスペースで区切って、Enter キーを押してデフォルトのディレクトリを使用します)。" input - # 如果用户没有输入目录,则使用默认目录 + # ユーザーがディレクトリを入力しない場合は、デフォルトのディレクトリが使用されます。 if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5674,119 +5674,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 } @@ -5798,9 +5798,9 @@ linux_backup() { -# 显示连接列表 +# 接続リストを表示 list_connections() { - echo "已保存的连接:" + echo "保存された接続:" echo "------------------------" cat "$CONFIG_FILE" | awk -F'|' '{print NR " - " $1 " (" $2 ")"}' echo "------------------------" @@ -5809,7 +5809,7 @@ list_connections() { # 新しい接続を追加 add_connection() { - send_stats "添加新连接" + send_stats "新しい接続を追加" echo "新しい接続を作成する例:" echo "- 接続名: my_server" echo "- IP アドレス: 192.168.1.100" @@ -6007,7 +6007,7 @@ mount_partition() { MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションのマウント + # パーティションをマウントする mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "ハードディスク管理機能" while true; do clear - echo "ハードドライブのパーティション管理" + echo "ハードディスクのパーティション管理" echo -e "${gl_huang}この機能は内部テスト中であるため、運用環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions @@ -7112,7 +7112,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 @@ -7186,7 +7186,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 ファイルを編集する" @@ -7329,7 +7329,7 @@ linux_docker() { echo "" echo "ボリューム操作" echo "------------------------" - echo "1. 新しいボリュームを作成する" + echo "1. 新しいボリュームを作成します" echo "2. 指定したボリュームを削除します" echo "3. すべてのボリュームを削除します" echo "------------------------" @@ -9082,7 +9082,7 @@ while true; do fi echo "" echo "------------------------" - echo "1. 使用する" + echo "1. 使用方法" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -11844,7 +11844,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,) @@ -11956,7 +11956,7 @@ while true; do # ディレクトリが存在しない場合は作成する mkdir -p "$(dirname "$CONFIG_FILE")" - echo "クライアント設定を貼り付け、Enter キーを 2 回押して保存してください。" + echo "クライアント構成を貼り付け、Enter キーを 2 回押して保存してください。" # 変数を初期化する input="" @@ -12378,7 +12378,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}------------------------" @@ -12636,8 +12636,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "最初にIPv6に切り替えました" - send_stats "最初にIPv6に切り替えました" + echo "IPv6優先に切り替えました" + send_stats "IPv6優先に切り替えました" ;; 3) @@ -12865,7 +12865,7 @@ EOF echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9.タイ・バンコク時間" + echo "9. タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -13990,7 +13990,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 "" @@ -14175,7 +14175,7 @@ done k_info() { -send_stats "k コマンドのリファレンス例" +send_stats "k コマンドリファレンスの使用例" echo "-------------------" echo "ビデオ紹介: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "以下は、k コマンドの参考使用例です。" @@ -14191,7 +14191,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" @@ -14304,7 +14304,7 @@ else swap) shift - send_stats "仮想メモリを素早く設定する" + send_stats "仮想メモリをすばやくセットアップする" add_swap "$@" ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index d95435dd8..9428eb1f4 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}기술 사자 스크립트 도구 상자에 오신 것을 환영합니다${gl_bai}" + echo "스크립트를 처음 사용하는 경우 사용자 라이센스 계약을 읽고 동의하십시오." + 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 - 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 @@ -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 "最小需求空间: ${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 @@ -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 @@ -261,14 +261,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" @@ -281,43 +281,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 } @@ -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 @@ -502,63 +502,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]) @@ -567,28 +567,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 "------------------------------------------------------------" @@ -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) @@ -622,8 +622,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) @@ -642,44 +642,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]) @@ -688,7 +688,7 @@ while true; do [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac ;; @@ -756,16 +756,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}" } @@ -777,27 +777,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 @@ -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 状态 + # 현재 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,117 +872,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가 차단됨" } @@ -992,7 +992,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 @@ -1002,12 +1002,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 @@ -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规则的函数 +# 국가 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_code 的 IP 区域文件失败" + echo "오류: 다운로드$country_codeIP 영역 파일 실패" continue fi @@ -1052,7 +1052,7 @@ manage_country_rules() { iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP - echo "已成功阻止 $country_code 的 IP 地址" + echo "성공적으로 차단되었습니다$country_codeIP 주소" rm "${country_code,,}.zone" ;; @@ -1062,7 +1062,7 @@ manage_country_rules() { fi if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" + 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_code 的 IP 地址" + echo "허용되었습니다.$country_codeIP 주소" rm "${country_code,,}.zone" ;; @@ -1086,11 +1086,11 @@ manage_country_rules() { ipset destroy "$ipset_name" fi - echo "已成功解除 $country_code 的 IP 地址限制" + echo "성공적으로 제거되었습니다$country_codeIP 주소 제한" ;; *) - echo "用法: manage_country_rules {block|allow|unblock} " + echo "사용법: prepare_country_rules {block|allow|unblock} " ;; esac done @@ -1111,42 +1111,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. 특정 국가 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 @@ -1159,10 +1159,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 @@ -1175,40 +1175,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 @@ -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_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" ;; *) @@ -1250,23 +1250,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 + # 이전 /swap 파일 삭제 rm -f /swapfile - # 创建新的 swap 分区 + # 새로운 스왑 파티션 생성 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 @@ -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}" @@ -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 @@ -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 @@ -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,15 +1446,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 "" } @@ -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" @@ -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 "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 @@ -1542,7 +1542,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 @@ -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,8 +1616,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}마치다" } @@ -1636,11 +1636,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" } @@ -1650,29 +1650,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의 캐시를 지워야 합니까? (예/아니요):" 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 "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 @@ -1696,28 +1696,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 @@ -1733,23 +1733,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 @@ -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/ { @@ -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/ { @@ -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,11 +1881,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 @@ -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,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 @@ -1983,31 +1983,31 @@ nginx_gzip() { web_security() { - send_stats "LDNMP环境防御" + send_stats "LDNMP 환경 방어" while true; do check_f2b_status 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 "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 @@ -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模式" - echo "到cf后台右上角我的个人资料,选择左侧API令牌,获取Global API Key" + send_stats "클라우드플레어 모드" + 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 @@ -2107,21 +2107,21 @@ 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}" + 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 @@ -2138,23 +2138,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) @@ -2179,10 +2179,10 @@ 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 ';') -# 根据值设置模式信息 +# 값에 따라 모드 정보 설정 if [ "$current_value" = "8" ]; then mode_info=" 高性能模式" else @@ -2198,21 +2198,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 @@ -2228,33 +2228,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 @@ -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 @@ -2278,23 +2278,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 @@ -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 @@ -2316,7 +2316,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP环境已设置成 高性能模式" + echo "LDNMP 환경이 고성능 모드로 설정되었습니다." ;; 3) @@ -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 # } @@ -2386,7 +2386,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "访问地址:" +echo "방문 주소:" ip_address @@ -2424,31 +2424,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 +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,34 +2477,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 @@ -2514,7 +2514,7 @@ block_container_port() { fi - echo "已阻止IP+端口访问该服务" + echo "IP+포트가 서비스 접근을 차단했습니다." save_iptables_rules } @@ -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 @@ -2554,17 +2554,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 +2575,7 @@ clear_container_rules() { fi - echo "已允许IP+端口访问该服务" + echo "IP+포트로 서비스 접속이 허용되었습니다" save_iptables_rules } @@ -2589,25 +2589,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 +2616,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 +2648,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,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. 阻止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) 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,12 +2771,12 @@ while true; do 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 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 "https://가 없는 도메인 이름 형식 example.com" 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,19 +2860,19 @@ 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) 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,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 "https://가 없는 도메인 이름 형식 example.com" 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" @@ -3063,11 +3063,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 +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 @@ -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,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 @@ -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,16 +3185,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 +3206,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 @@ -3247,17 +3247,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 @@ -3280,14 +3280,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 @@ -3340,12 +3340,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//') @@ -3358,35 +3358,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 @@ -3395,15 +3395,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') @@ -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 "创建关联站点" - 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 @@ -3459,25 +3459,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 @@ -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 ;; @@ -3518,21 +3518,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 @@ -3541,20 +3541,20 @@ while true; do panel_app_install add_app_id - send_stats "${panelname}安装" + send_stats "${panelname}설치하다" ;; 2) panel_app_manage 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 @@ -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,17 +3620,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 @@ -3640,9 +3640,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 @@ -3662,17 +3662,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를 입력하십시오. [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 + 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_name 已成功添加到 frpc.toml" + # 생성된 정보 출력 + echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." docker restart frpc @@ -3694,12 +3694,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 @@ -3709,7 +3709,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # 打印表头 + # 헤더 인쇄 printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -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, \ @@ -3739,11 +3739,11 @@ list_forwarding_services() { type } - # 更新当前服务名称 + # 현재 서비스 이름 업데이트 if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 清除之前的值 + # 이전 값 지우기 local_ip="" local_port="" remote_port="" @@ -3772,7 +3772,7 @@ list_forwarding_services() { } END { - # 打印最后一个服务的信息 + # 마지막 서비스에 대한 정보 인쇄 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 @@ -3804,18 +3804,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 @@ -3824,7 +3824,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}" @@ -3851,7 +3851,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRP服务端" + send_stats "FRP 서버" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3859,25 +3859,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 @@ -3885,7 +3885,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 +3895,7 @@ frps_panel() { donlond_frp frps add_app_id - echo "FRP服务端已经更新完成" + echo "FRP 서버가 업데이트되었습니다" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3906,37 +3906,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 "https://가 없는 도메인 이름 형식 example.com" 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 서비스 상태가 새로 고쳐졌습니다." ;; *) @@ -3949,7 +3949,7 @@ frps_panel() { frpc_panel() { - send_stats "FRP客户端" + send_stats "FRP 클라이언트" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3957,10 +3957,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 @@ -3968,13 +3968,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 @@ -3982,7 +3982,7 @@ frpc_panel() { configure_frpc add_app_id - echo "FRP客户端已经安装完成" + echo "FRP 클라이언트가 설치되었습니다" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -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,68 +4049,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 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..." - 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 \ @@ -4118,31 +4118,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" ;; *) @@ -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 @@ -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 @@ -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,13 +4243,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 @@ -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 "清理未使用的依赖..." + 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 @@ -4327,26 +4327,26 @@ 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地址" + 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" @@ -4354,7 +4354,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,14 +4362,14 @@ 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 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 设置为 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/' \ @@ -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" @@ -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 @@ -4460,17 +4460,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 @@ -4488,7 +4488,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}" } @@ -4497,26 +4497,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}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}이 기능을 실행하려면 루트 사용자가 필요합니다!" && 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 @@ -4527,41 +4527,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" @@ -4577,21 +4577,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 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 + 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 @@ -4599,49 +4599,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 "우분투 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 @@ -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 @@ -4666,7 +4666,7 @@ dd_xitong() { ;; 23) - send_stats "重装alma10" + send_stats "alma10 재설치" dd_xitong_3 bash reinstall.sh almalinux 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 @@ -4714,7 +4714,7 @@ dd_xitong() { ;; 29) - send_stats "重装centos10" + send_stats "centos10 재설치" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4722,7 +4722,7 @@ dd_xitong() { ;; 30) - send_stats "重装centos9" + send_stats "centos9 재설치" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4730,7 +4730,7 @@ dd_xitong() { ;; 31) - send_stats "重装alpine" + send_stats "알파인 재설치" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4738,7 +4738,7 @@ dd_xitong() { ;; 32) - send_stats "重装arch" + send_stats "아치 재설치" dd_xitong_3 bash reinstall.sh arch reboot @@ -4746,7 +4746,7 @@ dd_xitong() { ;; 33) - send_stats "重装kali" + send_stats "칼리 재설치" dd_xitong_3 bash reinstall.sh kali reboot @@ -4754,7 +4754,7 @@ dd_xitong() { ;; 34) - send_stats "重装openeuler" + send_stats "openeuler 다시 설치" dd_xitong_3 bash reinstall.sh openeuler reboot @@ -4762,7 +4762,7 @@ dd_xitong() { ;; 35) - send_stats "重装opensuse" + send_stats "Openuse 다시 설치" 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 "윈도우 11 재설치" dd_xitong_2 bash InstallNET.sh -windows 11 -lang "cn" reboot @@ -4787,14 +4787,14 @@ dd_xitong() { 42) dd_xitong_2 - send_stats "重装windows10" + send_stats "윈도우 10 재설치" 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 @@ -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 @@ -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 @@ -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 "------------------------" - 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) @@ -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内核开启BBR3" + echo "데비안/우분투만 지원" + 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+') @@ -4949,17 +4949,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 +4968,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 } @@ -5009,37 +5009,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 "------------------------" - 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 "Red Hat 커널 제거" server_reboot ;; @@ -5052,26 +5052,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 "계속하시겠습니까? (예/아니요):" 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 @@ -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 \ @@ -5092,19 +5092,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 +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 run -it --rm \ --name clamav \ --mount source=clam_db,target=/var/lib/clamav \ @@ -5122,8 +5122,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}" } @@ -5135,23 +5135,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 @@ -5160,7 +5160,7 @@ clamav() { ;; 2) - send_stats "重要目录扫描" + send_stats "중요한 디렉토리 스캔" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5168,8 +5168,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 +5186,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 +5212,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 @@ -5253,36 +5253,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 @@ -5294,37 +5294,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 @@ -5336,16 +5336,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 @@ -5356,62 +5356,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 @@ -5438,7 +5438,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 @@ -5447,17 +5447,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 } @@ -5467,29 +5467,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 +5511,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 +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}#" @@ -5535,9 +5535,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 +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 "启用后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 +5615,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 +5623,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 "휴지통을 비우시겠습니까? [예/아니요]:" confirm if [[ "$confirm" == "y" ]]; then trash-empty - echo "回收站已清空。" + echo "휴지통이 비워졌습니다." fi ;; *) @@ -5650,23 +5650,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 "- Enter를 눌러 기본 디렉터리(/etc/usr/home)를 사용합니다." + read -r -p "백업할 디렉터리를 입력하십시오(여러 디렉터리를 공백으로 구분하고 Enter를 눌러 기본 디렉터리를 사용하십시오)." input - # 如果用户没有输入目录,则使用默认目录 + # 사용자가 디렉터리를 입력하지 않으면 기본 디렉터리가 사용됩니다. if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5674,119 +5674,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 } @@ -5798,56 +5798,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를 두 번 누르세요)." 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,89 +5856,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 @@ -5950,21 +5950,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 } @@ -5980,156 +5980,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? (예/아니요):" 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 ;; @@ -6138,64 +6138,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 "- 원격 디렉터리: /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 "원격 user@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를 두 번 누르세요)." 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" @@ -6203,63 +6203,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 @@ -6270,51 +6270,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 @@ -6322,32 +6322,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="" @@ -6355,66 +6355,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 ;; @@ -6423,9 +6423,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "无效的选择,请重试。" ;; + *) echo "선택이 잘못되었습니다. 다시 시도해 주세요." ;; esac - read -e -p "按回车键继续..." + read -e -p "계속하려면 Enter를 누르세요..." done } @@ -6440,7 +6440,7 @@ rsync_manager() { linux_info() { clear - send_stats "系统信息查询" + send_stats "시스템 정보 쿼리" ip_address @@ -6490,41 +6490,41 @@ 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" - 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 @@ -6537,111 +6537,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 통신 연결 도구" + 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}레인저 파일 관리 도구" + 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) @@ -6649,7 +6649,7 @@ linux_tools() { install btop clear btop - send_stats "安装btop" + send_stats "btop 설치" ;; 12) clear @@ -6658,7 +6658,7 @@ linux_tools() { clear ranger cd ~ - send_stats "安装ranger" + send_stats "레인저 설치" ;; 13) clear @@ -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 @@ -6694,7 +6694,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "安装nano" + send_stats "나노 설치" ;; @@ -6705,7 +6705,7 @@ linux_tools() { clear git --help cd ~ - send_stats "安装git" + send_stats "자식 설치" ;; 21) @@ -6713,67 +6713,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 "닌베이더 설치" ;; 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 컬 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) @@ -6781,7 +6781,7 @@ linux_tools() { ;; *) - echo "无效的输入!" + echo "입력이 잘못되었습니다!" ;; esac break_end @@ -6795,27 +6795,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 @@ -6857,21 +6857,21 @@ docker_ssh_migration() { list_backups() { local BACKUP_ROOT="/tmp" - 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 -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,28 +6892,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도커 작성 컨테이너입니다${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 项目已经打包过,跳过 + # Compose 프로젝트가 이미 패키징된 경우 건너뛰세요. if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}Compose 项目 [$project_name] 已备份过,跳过重复打包...${NC}" + echo -e "${YELLOW}프로젝트 작성 [$project_name] 이미 백업되어 있으니 반복 패키징은 생략하세요...${NC}" continue fi @@ -6921,137 +6921,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 복원:$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 -e -p "请输入要还原的备份目录: " BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + send_stats "도커 복원" + 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 项目 --------- + # --------- 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 项目的容器是否已经在运行 + # 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 -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" - 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 @@ -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 @@ -7095,68 +7095,68 @@ docker_ssh_migration() { # ---------------------------- - # 迁移 + # 이주하다 # ---------------------------- migrate_docker() { - send_stats "Docker迁移" + send_stats "도커 마이그레이션" 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 - 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" - 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; } + 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}" } # ---------------------------- - # 主菜单 + # 메인 메뉴 # ---------------------------- 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. 도커 프로젝트 백업" + echo -e "2. 도커 프로젝트 마이그레이션" + 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 ;; 3) restore_docker ;; 4) delete_backup ;; 0) return ;; - *) echo -e "${RED}无效选项${NC}" ;; + *) echo -e "${RED}잘못된 옵션${NC}" ;; esac break_end done @@ -7173,38 +7173,38 @@ linux_docker() { while true; do clear - # send_stats "docker管理" - echo -e "Docker管理" + # 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全局状态 ${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}도커 컨테이너 관리${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 "도커 환경 설치" install_add_docker ;; @@ -7215,22 +7215,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 "Docker 볼륨:${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 "" @@ -7245,8 +7245,8 @@ linux_docker() { 5) while true; do clear - send_stats "Docker网络管理" - echo "Docker网络列表" + send_stats "도커 네트워크 관리" + echo "도커 네트워크 목록" echo "------------------------------------------------------------" docker network ls echo "" @@ -7270,36 +7270,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 @@ -7308,8 +7308,8 @@ linux_docker() { ;; 4) - send_stats "删除网络" - read -e -p "请输入要删除的网络名: " dockernetwork + send_stats "네트워크 삭제" + read -e -p "삭제할 네트워크 이름을 입력하세요:" dockernetwork docker network rm $dockernetwork ;; @@ -7323,29 +7323,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 @@ -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]) @@ -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 "도커 정리" read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7385,13 +7385,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) ;; @@ -7407,13 +7407,13 @@ linux_docker() { 11) clear - send_stats "Docker v6 开" + send_stats "도커 v6 켜짐" docker_ipv6_on ;; 12) clear - send_stats "Docker v6 关" + send_stats "도커 v6 닫기" docker_ipv6_off ;; @@ -7424,7 +7424,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]) @@ -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,151 +7462,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}예우 스트리밍 미디어 잠금 해제 감지" + 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 삼중 네트워크 백홀 회선 테스트" + 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 세 개의 네트워크 라인 테스트" + 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}벤치 성능 테스트" + 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 "예우 스트리밍 미디어 잠금 해제 감지" 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 "초고속 트리플 네트워크 속도 테스트" 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 "벤치 성능 테스트" 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 @@ -7632,51 +7632,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}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 "설치하시겠습니까? (예/아니요):" 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 "请输入Speedtest间隔时间(秒) [默认: $DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval + read -e -p "속도 테스트 간격 시간(초)을 입력하십시오. [기본값:$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" \ @@ -7684,14 +7684,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 ;; @@ -7699,20 +7699,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 "계속하시겠습니까? (예/아니요):" 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) @@ -7724,28 +7724,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 - 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) @@ -7756,15 +7756,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 +7785,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 +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}安装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}워드프레스 설치${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 포럼 웹사이트 설치${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 +7872,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 +7898,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 +7934,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 "레디스 호스트: 레디스" ;; 5) clear - # 苹果CMS + # AppleCMS webname="苹果CMS" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포 시작$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7973,24 +7973,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 +8011,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 "레디스 주소 : 레디스" + echo "redis 비밀번호: 기본적으로 입력되지 않음" + echo "레디스 포트: 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论坛 + # 플라럼 포럼 webname="flarum论坛" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포 시작$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8075,12 +8075,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 +8088,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 +8113,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 +8126,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 +8152,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 +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 "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "현재는 zip 형식의 소스 코드 패키지만 업로드할 수 있습니다. 소스 코드 패키지를 /home/web/html/에 넣어주세요.${yuming}디렉토리 아래" + read -e -p "다운로드 링크를 입력하여 소스 코드 패키지를 원격으로 다운로드할 수도 있습니다. 원격 다운로드를 건너뛰려면 Enter를 직접 누르세요." url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8193,20 +8193,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 @@ -8217,15 +8217,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 +8235,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로 끝나는 압축 패키지여야 합니다. Pagoda/1panel 백업 데이터 가져오기를 지원하려면 /home/ 디렉토리에 넣으십시오." + read -e -p "다운로드 링크를 입력하여 원격으로 백업 데이터를 다운로드할 수도 있습니다. 원격 다운로드를 건너뛰려면 Enter를 직접 누르세요." url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -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 @@ -8278,12 +8278,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 +8296,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 +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" @@ -8332,11 +8332,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 +8356,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 +8379,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 +8397,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 +8431,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 +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 "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "현재는 zip 형식의 소스 코드 패키지만 업로드할 수 있습니다. 소스 코드 패키지를 /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 "请输入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 @@ -8492,23 +8492,23 @@ 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 "백업 데이터를 원격 서버로 전송하시겠습니까? (예/아니요):" 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 /home/*.tar.gz | head -1) @@ -8516,9 +8516,9 @@ 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 "文件已传送至远程服务器home目录。" + echo "파일이 원격 서버 홈 디렉터리로 전송되었습니다." else - echo "未找到要传送的文件。" + echo "전송할 파일을 찾을 수 없습니다." fi break ;; @@ -8526,7 +8526,7 @@ linux_ldnmp() { break ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac done @@ -8534,9 +8534,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 @@ -8546,18 +8546,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 ;; *) @@ -8571,19 +8571,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 "최신 백업을 복원하려면 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 @@ -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 ;; @@ -8620,11 +8620,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,13 +8644,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 @@ -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/ @@ -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" - 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)(최신 버전을 얻으려면 Enter 키를 누르세요):" version local version=${version:-8.3} cd /home/web/ cp /home/web/docker-compose.yml /home/web/docker-compose1.yml @@ -8709,8 +8709,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 +8721,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 @@ -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]) @@ -8769,7 +8769,7 @@ linux_ldnmp() { ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac ;; @@ -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..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8813,71 +8813,71 @@ 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 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}禅道项目管理软件 ${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}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}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}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 패널 탐색 패널${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}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}도커 가속 스테이션${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}라마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}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}비트워든 비밀번호 관리자${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}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}코마리 서버 모니터링 도구${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}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}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}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 @@ -9030,8 +9030,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,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "搭建哪吒" + send_stats "네자 빌드" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,20 +9073,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 "나타 모니터링$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 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) @@ -9143,7 +9143,7 @@ while true; do ;; 9|mail) - send_stats "搭建邮局" + send_stats "우체국을 짓다" clear install telnet local app_id="9" @@ -9153,44 +9153,44 @@ 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}}' 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 + 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" @@ -9200,7 +9200,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "按任意键继续..." + echo "계속하려면 아무 키나 누르세요..." read -n 1 -s -r -p "" install jq @@ -9219,9 +9219,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 "" @@ -9244,9 +9244,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 "" ;; @@ -9257,7 +9257,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "앱이 제거되었습니다." ;; *) @@ -9291,7 +9291,7 @@ while true; do clear ip_address - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -9301,7 +9301,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 } @@ -9311,7 +9311,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "应用已卸载" + echo "앱이 제거되었습니다." } docker_app_plus @@ -9395,7 +9395,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -9409,7 +9409,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 @@ -9554,7 +9554,7 @@ while true; do ;; 19|safeline) - send_stats "搭建雷池" + send_stats "천둥 웅덩이를 만들어라" local app_id="19" local docker_name=safeline-mgt @@ -9562,20 +9562,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 "레이치(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 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) @@ -9585,7 +9585,7 @@ while true; do add_app_id clear - echo "雷池WAF面板已经安装完成" + echo "Leichi WAF 패널이 설치되었습니다." check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9598,7 +9598,7 @@ while true; do add_app_id clear - echo "雷池WAF面板已经更新完成" + echo "Leichi WAF 패널이 업데이트되었습니다." check_docker_app_ip ;; 3) @@ -9609,7 +9609,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" ;; *) @@ -9728,8 +9728,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 \ @@ -10017,7 +10017,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" @@ -10070,7 +10070,7 @@ while true; do ;; 38|xiaoya) - send_stats "小雅全家桶" + send_stats "Xiaoya 가족 버킷" clear install_docker check_disk_space 1 @@ -10274,9 +10274,9 @@ while true; do prometheus_install clear ip_address - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip - echo "初始用户名密码均为: admin" + echo "초기 사용자 이름과 비밀번호는 admin입니다." } docker_app_update() { @@ -10294,7 +10294,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "应用已卸载" + echo "앱이 제거되었습니다." } docker_app_plus @@ -10381,7 +10381,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 ;; @@ -10501,7 +10501,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -10516,7 +10516,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 @@ -10544,7 +10544,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -10559,7 +10559,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -10567,7 +10567,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 @@ -10588,17 +10588,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 "앱이 업데이트되었습니다" } @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "应用已卸载" + echo "앱이 제거되었습니다." } docker_app_plus @@ -10655,7 +10655,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 } @@ -10671,7 +10671,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 @@ -10933,7 +10933,7 @@ while true; do docker_rum() { - read -e -p "设置LibreTV的登录密码: " app_passwd + read -e -p "LibreTV 로그인 비밀번호 설정:" app_passwd docker run -d \ --name libretv \ @@ -10967,9 +10967,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 @@ -10985,7 +10985,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -10999,7 +10999,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 @@ -11072,8 +11072,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 \ @@ -11170,11 +11170,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) @@ -11183,17 +11183,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 } @@ -11203,7 +11203,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11288,7 +11288,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 \ @@ -11392,7 +11392,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -11405,7 +11405,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 @@ -11566,7 +11566,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 @@ -11618,7 +11618,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -11632,7 +11632,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 @@ -11707,8 +11707,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} \ @@ -11756,7 +11756,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -11770,7 +11770,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 @@ -11810,7 +11810,7 @@ while true; do block_container_port "$docker_name" "$ipv4_address" clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -11824,7 +11824,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 @@ -11842,9 +11842,9 @@ 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 + read -e -p "WireGuard 네트워크 세그먼트(기본값 10.13.13.0)를 입력하세요." NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11914,18 +11914,18 @@ while true; do sleep 2 echo - echo -e "${gl_huang}所有客户端二维码配置: ${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的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을 다운로드하고 위의 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 } @@ -11953,16 +11953,16 @@ while true; do local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" - # 创建目录(如果不存在) + # 디렉터리가 없으면 생성 mkdir -p "$(dirname "$CONFIG_FILE")" - echo "请粘贴你的客户端配置,连续按两次回车保存:" + echo "클라이언트 구성을 붙여넣고 Enter를 두 번 눌러 저장하세요." - # 初始化变量 + # 변수 초기화 input="" empty_line_count=0 - # 逐行读取用户输入 + # 사용자 입력을 한 줄씩 읽습니다. while IFS= read -r line; do if [[ -z "$line" ]]; then ((empty_line_count++)) @@ -11975,10 +11975,10 @@ while true; do fi done - # 写入配置文件 + # 구성 파일 쓰기 echo "$input" > "$CONFIG_FILE" - echo "客户端配置已保存到 $CONFIG_FILE" + echo "클라이언트 구성이 다음에 저장되었습니다.$CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12023,10 +12023,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 @@ -12043,7 +12043,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -12057,7 +12057,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 @@ -12097,24 +12097,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" - read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice + echo "생성된 백업 파일: /$backup_filename" + read -e -p "백업 데이터를 원격 서버로 전송하시겠습니까? (예/아니요):" 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) @@ -12122,14 +12122,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项目,不包含宝塔,1panel等建站面板的数据备份。" + echo "참고: 현재 백업에는 docker 프로젝트만 포함되며, Pagoda, 1panel 등 웹사이트 구축 패널의 데이터 백업은 포함되지 않습니다." break ;; esac @@ -12139,29 +12139,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 "최신 백업을 복원하려면 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 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 ;; @@ -12184,35 +12184,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 @@ -12220,7 +12220,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업공간 시작$SESSION_NAME" tmux_run ;; @@ -12228,63 +12228,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 ;; @@ -12296,21 +12296,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 ;; @@ -12326,29 +12326,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 "다음과 같이 백그라운드에서 실행하려는 명령을 입력하십시오. 컬 -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 @@ -12373,54 +12373,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}기본 호스트 확인${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}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 @@ -12428,34 +12428,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 "현재 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 @@ -12488,7 +12488,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 @@ -12517,55 +12517,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 @@ -12584,8 +12584,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 @@ -12600,51 +12600,51 @@ 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 "------------------------" 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 "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 优先" + 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修复" + echo "이 기능은 jhb에서 제공합니다. 감사합니다!" + send_stats "IPv6 수리" ;; *) @@ -12662,43 +12662,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 "사용자 정의 가상 메모리 세트" ;; *) @@ -12711,8 +12711,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 @@ -12723,62 +12723,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" ;; @@ -12791,50 +12791,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 "" @@ -12842,46 +12842,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. 미국 서부 시간 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 @@ -12924,21 +12924,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 @@ -12956,11 +12956,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 @@ -12968,32 +12968,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 @@ -13001,62 +13001,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 # 跳出循环,退出菜单 @@ -13068,32 +13068,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 # 跳出循环,退出菜单 @@ -13104,24 +13104,24 @@ EOF 22) root_use - send_stats "ssh防御" + 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 -e "SSH 방어 프로그램$check_f2b_status" + echo "fall2ban은 무차별 대입 크래킹을 방지하는 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) f2b_install_sshd @@ -13143,7 +13143,7 @@ EOF 9) remove fail2ban rm -rf /etc/fail2ban - echo "Fail2Ban防御程序已卸载" + echo "Fail2Ban 방어 프로그램이 제거되었습니다." break ;; *) @@ -13156,47 +13156,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 ~ @@ -13209,15 +13209,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 @@ -13230,40 +13230,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 @@ -13279,18 +13279,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 로봇 API 및 사용자 ID를 구성해야 합니다." + 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 @@ -13312,7 +13312,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 @@ -13323,21 +13323,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 @@ -13381,7 +13381,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; } @@ -13404,62 +13404,62 @@ EOF 41) clear - send_stats "留言板" - echo "访问科技lion官方留言板,您对脚本有任何想法欢迎留言交流!" + send_stats "메시지 보드" + echo "Technology Lion 공식 게시판을 방문해 보세요. 스크립트에 대한 아이디어가 있으시면 교환 메시지를 남겨주세요!" echo "https://board.kejilion.pro" - echo "公共密码: kejilion.sh" + echo "공개 비밀번호: kejilion.sh" ;; 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 "원클릭 유지 관리를 원하시나요? (예/아니요):" 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) @@ -13476,25 +13476,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 @@ -13502,7 +13502,7 @@ EOF 99) clear - send_stats "重启系统" + send_stats "시스템을 다시 시작하세요" server_reboot ;; 100) @@ -13518,32 +13518,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 @@ -13559,11 +13559,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 "계속하시겠습니까? (예/아니요):" choice case "$choice" in [Yy]) @@ -13571,16 +13571,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 ;; @@ -13590,7 +13590,7 @@ EOF ;; *) - echo "无效的输入!" + echo "입력이 잘못되었습니다!" ;; esac break_end @@ -13608,187 +13608,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. 파일 디렉터리 압축 풀기 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 @@ -14086,15 +14086,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 ;; *) @@ -14116,41 +14116,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}Eudemons Parlu 서버 오픈 스크립트" 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_info ;; - 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 ;; @@ -14161,13 +14161,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "幻兽帕鲁开服脚本" ; 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 @@ -14175,70 +14175,70 @@ 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" -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 "显示系统信息 k info" +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 제거 nano wget | k 델 나노 wget | k 나노 wget 제거 | k 나노 wget 제거" +echo "시스템 k 업데이트 업데이트 | 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 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 "도커 관리 플레인 k 도커" +echo "docker 환경 설치 k docker 설치 |k docker 설치" +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 "역방향 프록시 설치 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 즐겨찾기 | k 명령 즐겨찾기" +echo "애플리케이션 시장 관리 k app" +echo "신청번호의 빠른 관리 k app 26 | k 앱 1패널 | k 앱 npm" +echo "시스템 정보 표시 k 정보" } 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|更新) @@ -14272,7 +14272,7 @@ else rsync_run) shift - send_stats "定时rsync同步" + send_stats "예약된 rsync 동기화" run_task "$@" ;; @@ -14291,7 +14291,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" @@ -14304,13 +14304,13 @@ else swap) shift - send_stats "快速设置虚拟内存" + send_stats "가상 메모리를 빠르게 설정하세요" add_swap "$@" ;; time|时区) shift - send_stats "快速设置时区" + send_stats "시간대를 빠르게 설정" set_timedate "$@" ;; @@ -14358,42 +14358,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 @@ -14403,15 +14403,15 @@ else shift case $1 in install|安装) - send_stats "快捷安装docker" + send_stats "도커를 빠르게 설치하세요" install_docker ;; ps|容器) - send_stats "快捷容器管理" + send_stats "빠른 컨테이너 관리" docker_ps ;; img|镜像) - send_stats "快捷镜像管理" + send_stats "빠른 이미지 관리" docker_image ;; *) @@ -14438,7 +14438,7 @@ else app) shift - send_stats "应用$@" + send_stats "신청$@" linux_panel "$@" ;; diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 40c81a274..05b2db1f1 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -9563,19 +9563,19 @@ while true; do check_docker_app clear echo -e "雷池服務$check_docker" - echo "雷池是长亭科技开发的WAF站点防火墙程序面板,可以反代站点进行自动化防御" - echo "视频介绍: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" + 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 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) @@ -9585,7 +9585,7 @@ while true; do add_app_id clear - echo "雷池WAF面板已经安装完成" + echo "雷池WAF面板已經安裝完成" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9598,7 +9598,7 @@ while true; do add_app_id clear - echo "雷池WAF面板已经更新完成" + echo "雷池WAF面板已經更新完成" check_docker_app_ip ;; 3) @@ -9609,7 +9609,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" ;; *) @@ -9728,8 +9728,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 \ @@ -10017,7 +10017,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" @@ -10274,9 +10274,9 @@ while true; do prometheus_install clear ip_address - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip - echo "初始用户名密码均为: admin" + echo "初始用戶名密碼均為: admin" } docker_app_update() { @@ -10294,7 +10294,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "应用已卸载" + echo "應用已卸載" } docker_app_plus @@ -10381,7 +10381,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 ;; @@ -10501,7 +10501,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip } @@ -10516,7 +10516,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 @@ -10544,7 +10544,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip } @@ -10559,7 +10559,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip } @@ -10567,7 +10567,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 @@ -10588,17 +10588,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 "應用已更新" } @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "应用已卸载" + echo "應用已卸載" } docker_app_plus @@ -10655,7 +10655,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 } @@ -10671,7 +10671,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 @@ -10933,7 +10933,7 @@ while true; do docker_rum() { - read -e -p "设置LibreTV的登录密码: " app_passwd + read -e -p "設置LibreTV的登錄密碼:" app_passwd docker run -d \ --name libretv \ @@ -10967,9 +10967,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 @@ -10985,7 +10985,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip } @@ -10999,7 +10999,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 @@ -11072,8 +11072,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 \ @@ -11170,11 +11170,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) @@ -11183,17 +11183,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 } @@ -11203,7 +11203,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11288,7 +11288,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 \ @@ -11392,7 +11392,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip } @@ -11405,7 +11405,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 @@ -11566,7 +11566,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 @@ -11618,7 +11618,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip } @@ -11632,7 +11632,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 @@ -11707,8 +11707,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} \ @@ -11756,7 +11756,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip } @@ -11770,7 +11770,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 @@ -11810,7 +11810,7 @@ while true; do block_container_port "$docker_name" "$ipv4_address" clear - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip } @@ -11824,7 +11824,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 @@ -11842,9 +11842,9 @@ 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 + read -e -p "請輸入 WireGuard 網段 (默認 10.13.13.0):" NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11914,18 +11914,18 @@ while true; do sleep 2 echo - echo -e "${gl_huang}所有客户端二维码配置: ${gl_bai}" + 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}" + 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}" - 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 } @@ -11953,16 +11953,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++)) @@ -11975,10 +11975,10 @@ while true; do fi done - # 写入配置文件 + # 寫入配置文件 echo "$input" > "$CONFIG_FILE" - echo "客户端配置已保存到 $CONFIG_FILE" + echo "客戶端配置已保存到$CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12023,10 +12023,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 @@ -12043,7 +12043,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "已經安裝完成" check_docker_app_ip } @@ -12057,7 +12057,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 @@ -12097,24 +12097,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" - 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 "目标服务器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) @@ -12122,14 +12122,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项目,不包含宝塔,1panel等建站面板的数据备份。" + echo "注意: 目前備份僅包含docker項目,不包含寶塔,1panel等建站面板的數據備份。" break ;; esac @@ -12139,29 +12139,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 ;; @@ -12184,35 +12184,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 @@ -12220,7 +12220,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "启动工作区$SESSION_NAME" + send_stats "啟動工作區$SESSION_NAME" tmux_run ;; @@ -12228,63 +12228,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 ;; @@ -12296,21 +12296,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 ;; @@ -12326,29 +12326,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 @@ -12373,54 +12373,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 @@ -12428,13 +12428,13 @@ linux_Settings() { 2) clear - send_stats "设置你的登录密码" - echo "设置你的登录密码" + send_stats "設置你的登錄密碼" + echo "設置你的登錄密碼" passwd ;; 3) root_use - send_stats "root密码模式" + send_stats "root密碼模式" add_sshpasswd ;; @@ -12442,20 +12442,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 @@ -12517,17 +12517,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) @@ -12538,19 +12538,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端口已修改" @@ -12559,13 +12559,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 @@ -12584,8 +12584,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 @@ -12606,45 +12606,45 @@ 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} 优先" + 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) 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修复" + echo "該功能由jhb大神提供,感謝他!" + send_stats "ipv6修復" ;; *) @@ -12662,43 +12662,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 "已設置自定義虛擬內存" ;; *) @@ -12711,8 +12711,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 @@ -12723,24 +12723,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" @@ -12748,14 +12748,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 @@ -12764,21 +12764,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" ;; @@ -12791,50 +12791,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 "" @@ -12842,46 +12842,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 @@ -12924,21 +12924,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 @@ -12956,11 +12956,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 @@ -12968,24 +12968,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) @@ -13001,62 +13001,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 # 跳出循环,退出菜单 @@ -13071,29 +13071,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 # 跳出循环,退出菜单 @@ -13104,24 +13104,24 @@ EOF 22) root_use - send_stats "ssh防御" + 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 -e "SSH防禦程序$check_f2b_status" + 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) f2b_install_sshd @@ -13143,7 +13143,7 @@ EOF 9) remove fail2ban rm -rf /etc/fail2ban - echo "Fail2Ban防御程序已卸载" + echo "Fail2Ban防禦程序已卸載" break ;; *) @@ -13156,47 +13156,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 ~ @@ -13209,15 +13209,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 @@ -13230,40 +13230,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 @@ -13279,18 +13279,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 @@ -13323,21 +13323,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 @@ -13381,7 +13381,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; } @@ -13405,61 +13405,61 @@ EOF 41) clear send_stats "留言板" - echo "访问科技lion官方留言板,您对脚本有任何想法欢迎留言交流!" + echo "訪問科技lion官方留言板,您對腳本有任何想法歡迎留言交流!" echo "https://board.kejilion.pro" - echo "公共密码: kejilion.sh" + echo "公共密碼: kejilion.sh" ;; 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) @@ -13476,25 +13476,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 @@ -13502,7 +13502,7 @@ EOF 99) clear - send_stats "重启系统" + send_stats "重啟系統" server_reboot ;; 100) @@ -13518,32 +13518,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 @@ -13559,11 +13559,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]) @@ -13571,7 +13571,7 @@ EOF (crontab -l | grep -v "kejilion.sh") | crontab - rm -f /usr/local/bin/k rm ~/kejilion.sh - echo "脚本已卸载,再见!" + echo "腳本已卸載,再見!" break_end clear exit @@ -13580,7 +13580,7 @@ EOF echo "已取消" ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "無效的選擇,請輸入 Y 或 N。" ;; esac ;; @@ -13590,7 +13590,7 @@ EOF ;; *) - echo "无效的输入!" + echo "無效的輸入!" ;; esac break_end @@ -13613,182 +13613,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 @@ -14086,15 +14086,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 ;; *) @@ -14116,37 +14116,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_info ;; - 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 ;; @@ -14161,13 +14161,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 @@ -14175,70 +14175,70 @@ 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 "內核調優面板 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" -echo "docker环境安装 k docker install |k docker 安装" +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 info" +echo "命令收藏夾 k fav | k 命令收藏夾" +echo "應用市場管理 k app" +echo "應用編號快捷管理 k app 26 | k app 1panel | k app npm" +echo "顯示系統信息 k info" } 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|更新) @@ -14272,7 +14272,7 @@ else rsync_run) shift - send_stats "定时rsync同步" + send_stats "定時rsync同步" run_task "$@" ;; @@ -14291,7 +14291,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" @@ -14304,13 +14304,13 @@ else swap) shift - send_stats "快速设置虚拟内存" + send_stats "快速設置虛擬內存" add_swap "$@" ;; time|时区) shift - send_stats "快速设置时区" + send_stats "快速設置時區" set_timedate "$@" ;; @@ -14358,42 +14358,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 @@ -14403,7 +14403,7 @@ else shift case $1 in install|安装) - send_stats "快捷安装docker" + send_stats "快捷安裝docker" install_docker ;; ps|容器) @@ -14411,7 +14411,7 @@ else docker_ps ;; img|镜像) - send_stats "快捷镜像管理" + send_stats "快捷鏡像管理" docker_image ;; *) @@ -14438,7 +14438,7 @@ else app) shift - send_stats "应用$@" + send_stats "應用$@" linux_panel "$@" ;; From 9ee84705dee75e42dc6ae46740b437f8ec53f2a7 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 1 Feb 2026 05:44:44 +0000 Subject: [PATCH 18/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202026-02-01=2005:44:44?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 24 ++++++++++++------------ jp/kejilion.sh | 44 ++++++++++++++++++++++---------------------- kr/kejilion.sh | 32 ++++++++++++++++---------------- 3 files changed, 50 insertions(+), 50 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index be180e5f2..f8ee19591 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -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 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 @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "Website optimization model" + send_stats "Website optimization mode" ;; 4) cd ~ @@ -5654,9 +5654,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 @@ -5698,7 +5698,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[@]}" @@ -6203,7 +6203,7 @@ add_task() { password_or_key="$key_file" auth_method="key" else - echo "Invalid key content!" + echo "无效的密钥内容!" return fi ;; @@ -7112,7 +7112,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 @@ -8815,7 +8815,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}------------------------" @@ -12444,7 +12444,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 "------------" @@ -12636,8 +12636,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) @@ -13839,7 +13839,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 cab55a2f4..2aa604e89 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" ;; @@ -2439,7 +2439,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) @@ -5356,7 +5356,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 "------------------------------------------------" @@ -5364,7 +5364,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. ゲームサーバー最適化モード: ゲームサーバーを最適化して、同時処理能力と応答速度を向上させます。" @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "ウェブサイト最適化モデル" + send_stats "ウェブサイト最適化モード" ;; 4) cd ~ @@ -5654,9 +5654,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") # ユーザーにバックアップ ディレクトリの入力を求めるプロンプトを表示する @@ -5698,7 +5698,7 @@ create_backup() { echo "- $path" done - # バックアップを作成する + # バックアップの作成 echo "バックアップの作成$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" @@ -6007,7 +6007,7 @@ mount_partition() { MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションをマウントする + # パーティションのマウント mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "ハードディスク管理機能" while true; do clear - echo "ハードディスクのパーティション管理" + echo "ハードドライブのパーティション管理" echo -e "${gl_huang}この機能は内部テスト中であるため、運用環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions @@ -6335,7 +6335,7 @@ run_task() { # スケジュールされたタスクを作成する schedule_task() { - send_stats "同期のスケジュールされたタスクを追加する" + send_stats "同期スケジュールされたタスクを追加する" read -e -p "定期的に同期するタスク番号を入力してください:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then @@ -7112,7 +7112,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 @@ -11844,7 +11844,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,) @@ -11956,7 +11956,7 @@ while true; do # ディレクトリが存在しない場合は作成する mkdir -p "$(dirname "$CONFIG_FILE")" - echo "クライアント構成を貼り付け、Enter キーを 2 回押して保存してください。" + echo "クライアント設定を貼り付け、Enter キーを 2 回押して保存してください。" # 変数を初期化する input="" @@ -12636,8 +12636,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "IPv6優先に切り替えました" - send_stats "IPv6優先に切り替えました" + echo "最初にIPv6に切り替えました" + send_stats "最初にIPv6に切り替えました" ;; 3) @@ -13839,7 +13839,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 @@ -13906,7 +13906,7 @@ while true; do 4) clear - send_stats "バックアップクラスター" + send_stats "バックアップクラスタ" echo -e "変更してください${gl_huang}/root/cluster/servers.py${gl_bai}ファイルをダウンロードしてバックアップを完了してください。" break_end ;; @@ -13990,7 +13990,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 "" @@ -14175,7 +14175,7 @@ done k_info() { -send_stats "k コマンドリファレンスの使用例" +send_stats "k コマンドのリファレンス例" echo "-------------------" echo "ビデオ紹介: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "以下は、k コマンドの参考使用例です。" @@ -14191,7 +14191,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" diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 9428eb1f4..77f6cc259 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -59,7 +59,7 @@ CheckFirstRun_true() { # 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. -# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 불편하신 점이 있으시면 이용을 거부하실 수 있습니다. +# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. @@ -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 @@ -3620,7 +3620,7 @@ EOF donlond_frp frps - # 생성된 정보 출력 + # 생성된 정보를 출력 ip_address echo "------------------------" echo "클라이언트 배포에 필요한 매개변수" @@ -3682,7 +3682,7 @@ remote_port = ${remote_port} EOF - # 생성된 정보 출력 + # 생성된 정보를 출력 echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." docker restart frpc @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "웹사이트 최적화 모델" + send_stats "웹사이트 최적화 모드" ;; 4) cd ~ @@ -5598,7 +5598,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 "------------------------" @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "하드디스크 관리 기능" while true; do clear - echo "하드 디스크 파티션 관리" + echo "하드 드라이브 파티션 관리" echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions @@ -7112,7 +7112,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 @@ -9073,7 +9073,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 @@ -12300,7 +12300,7 @@ linux_work() { echo -e "SSH 상주 모드${tmux_sshd_status}" echo "SSH 연결을 연 후 바로 상주 모드로 들어가고 이전 작업 상태로 바로 돌아갑니다." echo "------------------------" - echo "1. 켜짐 2. 꺼짐" + echo "1. 켜기 2. 끄기" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -12636,8 +12636,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "IPv6 우선순위로 전환됨" - send_stats "IPv6 우선순위로 전환됨" + echo "먼저 IPv6로 전환됨" + send_stats "먼저 IPv6로 전환됨" ;; 3) @@ -13191,7 +13191,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 @@ -13839,7 +13839,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 @@ -13990,7 +13990,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 "" @@ -14175,7 +14175,7 @@ done k_info() { -send_stats "k 명령 참조 사용 사례" +send_stats "k 명령 참조 예" echo "-------------------" echo "영상 소개: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "다음은 k 명령의 참조 사용 사례입니다." From cf0fe0774c55c1f3598e1610d7c90a17b05ed9a6 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 8 Feb 2026 05:32:33 +0000 Subject: [PATCH 19/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202026-02-08=2005:32:33?= 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 | 24 ++++++++++++------------ 3 files changed, 38 insertions(+), 38 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index f8ee19591..7264a20ff 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -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 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 @@ -4460,7 +4460,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}" } @@ -4510,7 +4510,7 @@ 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 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 } @@ -6203,7 +6203,7 @@ add_task() { password_or_key="$key_file" auth_method="key" else - echo "无效的密钥内容!" + echo "Invalid key content!" return fi ;; @@ -8815,7 +8815,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}------------------------" @@ -9153,7 +9153,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" @@ -12198,7 +12198,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" @@ -12444,7 +12444,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 "------------" @@ -13990,7 +13990,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 2aa604e89..5b9a64390 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -895,7 +895,7 @@ open_port() { done save_iptables_rules - send_stats "ポートがオープンされました" + send_stats "ポートがオープンしました" } @@ -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 @@ -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 @@ -4342,7 +4342,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 "------------------------" @@ -4460,7 +4460,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}" } @@ -4510,7 +4510,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 } @@ -6537,7 +6537,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}" @@ -7082,7 +7082,7 @@ 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}" @@ -7186,7 +7186,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 ファイルを編集する" @@ -7329,7 +7329,7 @@ linux_docker() { echo "" echo "ボリューム操作" echo "------------------------" - echo "1. 新しいボリュームを作成します" + echo "1. 新しいボリュームを作成する" echo "2. 指定したボリュームを削除します" echo "3. すべてのボリュームを削除します" echo "------------------------" @@ -8815,7 +8815,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}------------------------" @@ -9082,7 +9082,7 @@ while true; do fi echo "" echo "------------------------" - echo "1. 使用方法" + echo "1. 使用する" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -11844,7 +11844,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,) @@ -12198,7 +12198,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" @@ -12865,7 +12865,7 @@ EOF echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9. タイ・バンコク時間" + echo "9.タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -13906,7 +13906,7 @@ while true; do 4) clear - send_stats "バックアップクラスタ" + send_stats "バックアップクラスター" echo -e "変更してください${gl_huang}/root/cluster/servers.py${gl_bai}ファイルをダウンロードしてバックアップを完了してください。" break_end ;; @@ -13990,7 +13990,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 77f6cc259..1aa5a00ba 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -59,7 +59,7 @@ CheckFirstRun_true() { # 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. -# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. +# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 불편하신 점이 있으시면 이용을 거부하실 수 있습니다. @@ -3188,7 +3188,7 @@ ldnmp_web_on() { echo "당신의$webname지어졌습니다!" echo "https://$yuming" echo "------------------------" - echo "$webname설치정보는 다음과 같습니다." + echo "$webname설치 정보는 다음과 같습니다." } @@ -3620,7 +3620,7 @@ EOF donlond_frp frps - # 생성된 정보를 출력 + # 생성된 정보 출력 ip_address echo "------------------------" echo "클라이언트 배포에 필요한 매개변수" @@ -3682,7 +3682,7 @@ remote_port = ${remote_port} EOF - # 생성된 정보를 출력 + # 생성된 정보 출력 echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." docker restart frpc @@ -4460,7 +4460,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}" } @@ -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 @@ -7345,7 +7345,7 @@ linux_docker() { ;; 2) - read -e -p "삭제 볼륨 이름을 입력하십시오(여러 볼륨 이름을 공백으로 구분하십시오):" dockerjuans + read -e -p "삭제 볼륨 이름을 입력하세요(여러 볼륨 이름을 공백으로 구분하세요):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -8815,7 +8815,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}------------------------" @@ -9153,7 +9153,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" @@ -12198,7 +12198,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" @@ -12380,7 +12380,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}사용자/비밀번호 생성기" @@ -13990,7 +13990,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 a5a48780a29da26e187375b75ab8fdf721353ec5 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 15 Feb 2026 05:19:40 +0000 Subject: [PATCH 20/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202026-02-15=2005:19:40?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 16 +- jp/kejilion.sh | 44 +- kr/kejilion.sh | 24 +- tw/kejilion.sh | 2440 ++++++++++++++++++++++++------------------------ 4 files changed, 1262 insertions(+), 1262 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 7264a20ff..4c642140c 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -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 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 @@ -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}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 } @@ -8815,7 +8815,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}------------------------" @@ -9153,7 +9153,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" @@ -12198,7 +12198,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" @@ -13873,7 +13873,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}" @@ -13990,7 +13990,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 5b9a64390..4870130ad 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -59,7 +59,7 @@ CheckFirstRun_true() { # この機能は、機能の埋め込み情報を収集し、現在のスクリプトのバージョン番号、使用時間、システム バージョン、CPU アーキテクチャ、マシンの国、およびユーザーが使用した機能名を記録します。機密情報は含まれませんので、ご安心ください。信じてください! # なぜこの機能が設計されたのでしょうか?その目的は、ユーザーが使いたい機能をより深く理解し、機能をさらに最適化し、ユーザーのニーズを満たす機能をさらに投入することです。 -# send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご心配な場合はご利用をお断りすることも可能です。 +# send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご不安がある場合はご利用をお断りすることも可能です。 @@ -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" ;; @@ -2439,7 +2439,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) @@ -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 @@ -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 @@ -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" ;; @@ -4342,7 +4342,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 "------------------------" @@ -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}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 } @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "ハードディスク管理機能" while true; do clear - echo "ハードドライブのパーティション管理" + echo "ハードディスクのパーティション管理" echo -e "${gl_huang}この機能は内部テスト中であるため、運用環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions @@ -6537,7 +6537,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 +6947,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 - # ボリュームマッピング + # 卷映射 local VOL_ARGS="" for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done @@ -6955,7 +6955,7 @@ 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 @@ -7082,7 +7082,7 @@ 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}" @@ -7186,7 +7186,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 ファイルを編集する" @@ -9073,7 +9073,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 @@ -12198,7 +12198,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" @@ -12865,7 +12865,7 @@ EOF echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9.タイ・バンコク時間" + echo "9. タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -13868,12 +13868,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}" @@ -13906,7 +13906,7 @@ while true; do 4) clear - send_stats "バックアップクラスター" + send_stats "バックアップクラスタ" echo -e "変更してください${gl_huang}/root/cluster/servers.py${gl_bai}ファイルをダウンロードしてバックアップを完了してください。" break_end ;; @@ -13990,7 +13990,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 1aa5a00ba..3237c3e2f 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -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 @@ -3188,7 +3188,7 @@ ldnmp_web_on() { echo "당신의$webname지어졌습니다!" echo "https://$yuming" echo "------------------------" - echo "$webname설치 정보는 다음과 같습니다." + echo "$webname설치정보는 다음과 같습니다." } @@ -3620,7 +3620,7 @@ EOF donlond_frp frps - # 생성된 정보 출력 + # 생성된 정보를 출력 ip_address echo "------------------------" echo "클라이언트 배포에 필요한 매개변수" @@ -3682,7 +3682,7 @@ remote_port = ${remote_port} EOF - # 생성된 정보 출력 + # 생성된 정보를 출력 echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." docker restart frpc @@ -5092,7 +5092,7 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "스캔할 디렉터리를 지정하십시오." + echo "스캔할 디렉터리를 지정하세요." return fi @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "하드디스크 관리 기능" while true; do clear - echo "하드 드라이브 파티션 관리" + echo "하드 디스크 파티션 관리" echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions @@ -9073,7 +9073,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 @@ -9153,7 +9153,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" @@ -9185,7 +9185,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 "------------------------" @@ -12198,7 +12198,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" @@ -13873,7 +13873,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}" @@ -13990,7 +13990,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 05b2db1f1..588a1654d 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -57,9 +57,9 @@ CheckFirstRun_true() { -# 收集功能埋點信息的函數,記錄當前腳本版本號,使用時間,系統版本,CPU架構,機器所在國家和用戶使用的功能名稱,絕對不涉及任何敏感信息,請放心!請相信我! -# 為什麼要設計這個功能,目的更好的了解用戶喜歡使用的功能,進一步優化功能推出更多符合用戶需求的功能。 -# 全文可搜搜 send_stats 函數調用位置,透明開源,如有顧慮可拒絕使用。 +# 收集功能埋藏資訊的函數,記錄當前腳本版本號,使用時間,系統版本,CPU架構,機器所在國家和用戶使用的功能名稱,絕對不涉及任何敏感信息,請放心!請相信我! +# 為什麼要設計這個功能,目的更好的了解使用者喜歡使用的功能,進一步優化功能推出更多符合使用者需求的功能。 +# 全文可搜尋 send_stats 函數呼叫位置,透明開源,如有顧慮可拒絕使用。 @@ -111,12 +111,12 @@ CheckFirstRun_false() { fi } -# 提示用戶同意條款 +# 提示使用者同意條款 UserLicenseAgreement() { clear echo -e "${gl_kjlan}歡迎使用科技lion腳本工具箱${gl_bai}" - echo "首次使用腳本,請先閱讀並同意用戶許可協議。" - echo "用戶許可協議: https://blog.kejilion.pro/user-license-agreement/" + echo "首次使用腳本,請先閱讀並同意使用者授權協議。" + 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 @@ -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,7 +261,7 @@ remove() { elif command -v pkg &>/dev/null; then pkg delete -y "$package" else - echo "未知的包管理器!" + echo "未知的套件管理器!" return 1 fi done @@ -330,7 +330,7 @@ enable() { /bin/systemctl enable "$SERVICE_NAME" fi - echo "$SERVICE_NAME已設置為開機自啟。" + echo "$SERVICE_NAME已設定為開機自啟動。" } @@ -508,45 +508,45 @@ while true; do 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 "------------------------" 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 + 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 + read -e -p "請輸入容器名稱(多個容器名稱請以空格分隔):" dockername docker rm -f $dockername ;; 5) send_stats "重啟指定容器" - read -e -p "請輸入容器名(多個容器名請用空格分隔):" dockername + read -e -p "請輸入容器名稱(多個容器名稱請以空格分隔):" dockername docker restart $dockername ;; 6) @@ -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,8 +622,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) @@ -642,14 +642,14 @@ done docker_image() { while true; do clear - send_stats "Docker鏡像管理" - echo "Docker鏡像列表" + send_stats "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 "------------------------" @@ -657,15 +657,15 @@ while true; do 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}" docker pull $name @@ -673,7 +673,7 @@ while true; do ;; 3) send_stats "刪除鏡像" - read -e -p "請輸入鏡像名(多個鏡像名請用空格分隔):" imagenames + read -e -p "請輸入鏡像名稱(多個鏡像名稱請以空格分隔):" imagenames for name in $imagenames; do docker rmi -f $name done @@ -756,16 +756,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}" } @@ -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,9 +795,9 @@ 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}" + echo -e "${gl_huang}目前已開啟ipv6訪問${gl_bai}" else echo "$UPDATED_CONFIG" | jq . > "$CONFIG_FILE" restart docker @@ -812,24 +812,24 @@ 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 @@ -872,7 +872,7 @@ iptables_open() { open_port() { local ports=($@) # 将传入的参数转换为数组 if [ ${#ports[@]} -eq 0 ]; then - echo "請提供至少一個端口號" + echo "請提供至少一個連接埠號" return 1 fi @@ -883,44 +883,44 @@ 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 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 @@ -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" @@ -964,7 +964,7 @@ allow_ip() { block_ip() { local ips=($@) # 将传入的参数转换为数组 if [ ${#ips[@]} -eq 0 ]; then - echo "請提供至少一個IP地址或IP段" + echo "請提供至少一個IP位址或IP段" return 1 fi @@ -974,7 +974,7 @@ 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" @@ -1042,7 +1042,7 @@ manage_country_rules() { fi if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "錯誤:下載$country_code的 IP 區域文件失敗" + echo "錯誤:下載$country_code的 IP 區域檔案失敗" continue fi @@ -1052,7 +1052,7 @@ manage_country_rules() { iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP - echo "已成功阻止$country_code的 IP 地址" + echo "已成功阻止$country_code的 IP 位址" rm "${country_code,,}.zone" ;; @@ -1062,7 +1062,7 @@ manage_country_rules() { fi if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "錯誤:下載$country_code的 IP 區域文件失敗" + echo "錯誤:下載$country_code的 IP 區域檔案失敗" 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_code的 IP 地址" + echo "已成功允許$country_code的 IP 位址" rm "${country_code,,}.zone" ;; @@ -1086,7 +1086,7 @@ manage_country_rules() { ipset destroy "$ipset_name" fi - echo "已成功解除$country_code的 IP 地址限制" + echo "已成功解除$country_code的 IP 位址限制" ;; *) @@ -1111,24 +1111,24 @@ iptables_panel() { save_iptables_rules while true; do clear - echo "高級防火牆管理" - send_stats "高級防火牆管理" + echo "進階防火牆管理" + send_stats "進階防火牆管理" echo "------------------------" iptables -L INPUT 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 "15. 阻止指定國家IP 16. 僅允許指定國家IP" echo "17. 解除指定國家IP限制" echo "------------------------" echo "0. 返回上一級選單" @@ -1136,17 +1136,17 @@ iptables_panel() { 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 @@ -1159,10 +1159,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 @@ -1175,7 +1175,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 "關閉所有連接埠" ;; 5) @@ -1250,23 +1250,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 @@ -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 @@ -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}" @@ -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 @@ -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 @@ -1446,10 +1446,10 @@ 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}" @@ -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 @@ -1480,7 +1480,7 @@ ssl_ps ssl_ps() { echo -e "${gl_huang}已申請的證書到期情況${gl_bai}" - echo "站點信息 證書到期時間" + echo "站點資訊 證書到期時間" echo "------------------------" for cert_dir in /etc/letsencrypt/live/*; do local cert_file="$cert_dir/fullchain.pem" @@ -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 "域名證書申請失敗" + 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. 國內備案限制 ➠ 中國大陸環境請確認域名是否備案" + 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" @@ -1542,7 +1542,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 @@ -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 } @@ -1636,7 +1636,7 @@ phpmyadmin_upgrade() { ip_address check_docker_app_ip - echo "登錄信息:" + echo "登入資訊:" echo "使用者名稱:$dbuse" echo "密碼:$dbusepasswd" echo @@ -1650,29 +1650,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) 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 "請輸入 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" \ @@ -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,25 +1699,25 @@ 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 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 @@ -1733,7 +1733,7 @@ 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:去掉註釋 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 @@ -1989,19 +1989,19 @@ 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 "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 "------------------------" @@ -2089,9 +2089,9 @@ 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的帳號:" 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 @@ -2112,16 +2112,16 @@ 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 "取得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的帳號:" cfuser read -e -p "輸入CF的Global API Key:" cftoken - read -e -p "輸入CF中域名的區域ID:" cfzonID + 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 @@ -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 @@ -2198,7 +2198,7 @@ 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 @@ -2231,11 +2231,11 @@ 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壓縮" - echo "7. 開啟zstd壓縮 8. 關閉zstd壓縮" + echo "3. 開啟gzip壓縮 4. 關閉gzip壓縮" + echo "5. 開啟br壓縮 6. 關閉br壓縮" + echo "7. 開啟zstd壓縮 8. 關閉zstd壓縮" echo "------------------------" echo "0. 返回上一級選單" echo "------------------------" @@ -2278,11 +2278,11 @@ web_optimization() { optimize_balanced - echo "LDNMP環境已設置成 標準模式" + echo "LDNMP環境已設定成 標準模式" ;; 2) - send_stats "站點高性能模式" + send_stats "站點高效能模式" # nginx調優 sed -i 's/worker_connections.*/worker_connections 20480;/' /home/web/nginx.conf @@ -2316,7 +2316,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP環境已設置成 高性能模式" + echo "LDNMP環境已設定成 高效能模式" ;; 3) @@ -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) @@ -2433,17 +2433,17 @@ check_docker_image_update() { 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) @@ -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,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 @@ -2487,14 +2487,14 @@ 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 - # 檢查並封禁其他所有 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 } @@ -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,7 +2535,7 @@ 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 @@ -2545,7 +2545,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 @@ -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 @@ -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 @@ -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,47 +2648,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,10 +2747,10 @@ 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 "------------------------" @@ -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 "輸入應用程式對外服務端口,回車預設使用${docker_port}連接埠:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port @@ -2800,25 +2800,25 @@ 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}域名訪問設置" + 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" ;; @@ -2860,10 +2860,10 @@ 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 "------------------------" @@ -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 "輸入應用程式對外服務端口,回車預設使用${docker_port}連接埠:" app_port local app_port=${app_port:-${docker_port}} local docker_port=$app_port install jq @@ -2895,18 +2895,18 @@ 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) @@ -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" @@ -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 "" } @@ -3188,7 +3188,7 @@ ldnmp_web_on() { echo "您的$webname搭建好了!" echo "https://$yuming" echo "------------------------" - echo "$webname安裝信息如下:" + echo "$webname安裝資訊如下:" } @@ -3287,7 +3287,7 @@ ldnmp_Proxy_backend() { 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 @@ -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 @@ -3365,18 +3365,18 @@ ldnmp_web_status() { 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 "------------------------" 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 "------------------------" @@ -3385,8 +3385,8 @@ ldnmp_web_status() { 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 @@ -3396,9 +3396,9 @@ ldnmp_web_status() { 2) send_stats "更換站點域名" - echo -e "${gl_hong}強烈建議:${gl_bai}先備份好全站數據再更換站點域名!" - read -e -p "請輸入舊域名:" oddyuming - read -e -p "請輸入新域名:" yuming + echo -e "${gl_hong}強烈建議:${gl_bai}先備份好全站資料再更換站點網域!" + read -e -p "請輸入舊網域名稱:" oddyuming + read -e -p "請輸入新網域:" yuming install_certbot install_ssltls certs_status @@ -3442,10 +3442,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 @@ -3469,15 +3469,15 @@ 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 "編輯站點配置" - 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 @@ -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,12 +3523,12 @@ 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 "------------------------" @@ -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,16 +3620,16 @@ EOF donlond_frp frps - # 輸出生成的信息 + # 輸出產生的信息 ip_address echo "------------------------" - echo "客戶端部署時需要用的參數" + echo "客戶端部署時所需使用的參數" echo "服務IP:$ipv4_address" echo "token: $token" echo - echo "FRP面板信息" - echo "FRP面板地址: http://$ipv4_address:$dashboard_port" - echo "FRP面板用戶名:$dashboard_user" + echo "FRP面板資訊" + echo "FRP面板位址: http://$ipv4_address:$dashboard_port" + echo "FRP面板使用者名稱:$dashboard_user" echo "FRP面板密碼:$dashboard_pwd" 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 [回車預設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} @@ -3682,8 +3682,8 @@ remote_port = ${remote_port} EOF - # 輸出生成的信息 - echo "服務$service_name已成功添加到 frpc.toml" + # 輸出產生的信息 + echo "服務$service_name已成功加入到 frpc.toml" docker restart frpc @@ -3695,7 +3695,7 @@ EOF delete_forwarding_service() { send_stats "刪除frp內網服務" - # 提示用戶輸入需要刪除的服務名稱 + # 提示使用者輸入需要刪除的服務名稱 read -e -p "請輸入需要刪除的服務名稱:" service_name # 使用 sed 刪除該服務及其相關配置 sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml @@ -3709,7 +3709,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # 打印表頭 + # 列印表頭 printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -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, \ @@ -3739,7 +3739,7 @@ list_forwarding_services() { type } - # 更新當前服務名稱 + # 更新目前服務名稱 if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 @@ -3772,7 +3772,7 @@ list_forwarding_services() { } END { - # 打印最後一個服務的信息 + # 列印最後一個服務的訊息 if (current_service != "" && current_service != "common" && local_ip != "" && local_port != "") { printf "%-16s %-21s %-26s %-10s\n", \ current_service, \ @@ -3785,14 +3785,14 @@ 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 的端口 @@ -3804,18 +3804,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 @@ -3860,22 +3860,22 @@ 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 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 case $choice in @@ -3906,36 +3906,36 @@ frps_panel() { close_port 8055 8056 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "應用已卸載" + echo "應用程式已解除安裝" ;; 5) 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 + read -e -p "請輸入需要阻止的連接埠:" frps_port block_host_port "$frps_port" "$ipv4_address" ;; 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 @@ -3968,9 +3968,9 @@ 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 "------------------------" @@ -4003,7 +4003,7 @@ frpc_panel() { close_port 8055 sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "應用已卸載" + echo "應用程式已解除安裝" ;; 4) @@ -4051,16 +4051,16 @@ yt_menu_pro() { clear send_stats "yt-dlp 下載工具" echo -e "yt-dlp $YTDLP_STATUS" - echo -e "yt-dlp 是一個功能強大的視頻下載工具,支持 YouTube、Bilibili、Twitter 等數千站點。" - echo -e "官網地址:https://github.com/yt-dlp/yt-dlp" + echo -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 "5. 單一影片下載 6. 大量影片下載 7. 自訂參數下載" + echo "8. 下載為MP3音訊 9.刪除影片目錄 10. Cookie管理(開發中)" echo "-------------------------" echo "0. 返回上一級選單" echo "-------------------------" @@ -4094,20 +4094,20 @@ yt_menu_pro() { 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 "現在開始批量下載..." @@ -4118,9 +4118,9 @@ 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 "自定義視頻下載" + send_stats "自訂影片下載" read -e -p "請輸入完整 yt-dlp 參數(不含 yt-dlp):" custom yt-dlp -P "$VIDEO_DIR" $custom \ --write-subs --sub-langs all \ @@ -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 + send_stats "刪除影片" + read -e -p "請輸入刪除影片名稱:" rmdir rm -rf "$VIDEO_DIR/$rmdir" ;; *) @@ -4206,7 +4206,7 @@ linux_update() { elif command -v opkg &>/dev/null; then opkg update else - echo "未知的包管理器!" + echo "未知的套件管理器!" return fi } @@ -4243,13 +4243,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 @@ -4269,21 +4269,21 @@ linux_clean() { elif command -v opkg &>/dev/null; then 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 "刪除系統日誌..." rm -rf /var/log/* - echo "刪除臨時文件..." + echo "刪除臨時檔案..." rm -rf /tmp/* else - echo "未知的包管理器!" + echo "未知的套件管理器!" return fi return @@ -4330,9 +4330,9 @@ root_use send_stats "優化DNS" while true; do clear - echo "優化DNS地址" + echo "优化DNS地址" echo "------------------------" - echo "當前DNS地址" + echo "当前DNS地址" cat /etc/resolv.conf echo "------------------------" echo "" @@ -4392,13 +4392,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/' \ @@ -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" @@ -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 @@ -4460,7 +4460,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}" } @@ -4488,7 +4488,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}" } @@ -4497,20 +4497,20 @@ 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 } @@ -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 @@ -4535,7 +4535,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,14 +4543,14 @@ 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 "重裝後初始使用者名稱:${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,7 +4560,7 @@ dd_xitong() { root_use 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" @@ -4577,7 +4577,7 @@ 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 2025" @@ -4857,12 +4857,12 @@ bbrv3() { clear local kernel_version=$(uname -r) echo "您已安裝xanmod的BBRv3內核" - echo "當前內核版本:$kernel_version" + echo "當前核心版本:$kernel_version" echo "" - 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,11 +4908,11 @@ 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 @@ -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+') @@ -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 @@ -4974,34 +4974,34 @@ elrepo_install() { # 檢測系統版本 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" + # 列印偵測到的作業系統訊息 + 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 內核倉庫並安裝最新的主線內核..." + 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 } @@ -5015,12 +5015,12 @@ elrepo() { clear kernel_version=$(uname -r) echo "您已安裝elrepo內核" - echo "當前內核版本:$kernel_version" + echo "當前核心版本:$kernel_version" echo "" - echo "內核管理" + echo "核心管理" echo "------------------------" - echo "1. 更新elrepo內核 2. 卸載elrepo內核" + echo "1. 更新elrepo內核 2. 卸載elrepo內核" echo "------------------------" echo "0. 返回上一級選單" echo "------------------------" @@ -5038,8 +5038,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 "解除安裝紅帽內核" server_reboot ;; @@ -5053,10 +5053,10 @@ elrepo() { clear echo "請備份數據,將為你升級Linux內核" - echo "視頻介紹: https://www.bilibili.com/video/BV1mH4y1w7qA?t=529.2" + 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 @@ -5098,13 +5098,13 @@ clamav_scan() { 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} " @@ -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}文件中搜索FOUND關鍵字確認病毒位置${gl_bai}" + echo -e "${gl_lv}如果有病毒請在${gl_huang}scan.log${gl_lv}文件中搜尋FOUND關鍵字確認病毒位置${gl_bai}" } @@ -5139,19 +5139,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 "包括病毒、木馬、間諜軟體、惡意腳本和其他有害軟體。" 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 @@ -5168,7 +5168,7 @@ clamav() { break_end ;; 3) - send_stats "自定義目錄掃描" + send_stats "自訂目錄掃描" read -e -p "請輸入要掃描的目錄,用空格分隔(例如:/etc /var /usr /home /root):" directories install_docker clamav_freshclam @@ -5186,21 +5186,21 @@ clamav() { -# 高性能模式優化函數 +# 高效能模式最佳化函數 optimize_high_performance() { 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,10 +5212,10 @@ 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}" @@ -5227,21 +5227,21 @@ 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 - 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,10 +5253,10 @@ 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}" @@ -5268,21 +5268,21 @@ 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}" + 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,10 +5294,10 @@ 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}" @@ -5310,21 +5310,21 @@ restore_defaults() { -# 網站搭建優化函數 +# 網站建置優化函數 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,10 +5336,10 @@ 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}" @@ -5356,19 +5356,19 @@ 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 "提供多種系統參數調優模式,使用者可依自身使用場景進行選擇切換。" 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 "--------------------" @@ -5379,13 +5379,13 @@ Kernel_optimize() { clear local tiaoyou_moshi="高性能优化模式" optimize_high_performance - send_stats "高性能模式優化" + send_stats "高性能模式最​​佳化" ;; 2) cd ~ clear optimize_balanced - send_stats "均衡模式優化" + send_stats "均衡模式最佳化" ;; 3) cd ~ @@ -5411,7 +5411,7 @@ Kernel_optimize() { cd ~ clear restore_defaults - send_stats "還原默認設置" + send_stats "還原預設設定" ;; *) break @@ -5438,7 +5438,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 @@ -5447,17 +5447,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 } @@ -5472,7 +5472,7 @@ while true; do clear echo "當前系統語言:$LANG" echo "------------------------" - echo "1. 英文 2. 簡體中文 3. 繁體中文" + echo "1. 英文 2. 簡體中文 3. 繁體中文" echo "------------------------" echo "0. 返回上一級選單" 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}#" @@ -5597,13 +5597,13 @@ 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 "回收站為空" echo "------------------------" - echo "1. 啟用回收站 2. 關閉回收站" - echo "3. 還原內容 4. 清空回收站" + echo "1. 啟用回收站 2. 關閉回收站" + echo "3. 還原內容 4. 清空回收站" echo "------------------------" echo "0. 返回上一級選單" echo "------------------------" @@ -5615,7 +5615,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 +5623,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已還原到主目錄。" @@ -5654,19 +5654,19 @@ 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 "建立備份範例:" + echo "- 備份單一目錄: /var/www" echo "- 備份多個目錄: /etc /home /var/log" - echo "- 直接回車將使用默認目錄 (/etc /usr /home)" - read -r -p "請輸入要備份的目錄(多個目錄用空格分隔,直接回車則使用默認目錄):" input + echo "- 直接回車將使用預設目錄 (/etc /usr /home)" + read -r -p "請輸入要備份的目錄(多個目錄以空格分隔,直接回車則使用預設目錄):" input - # 如果用戶沒有輸入目錄,則使用默認目錄 + # 如果使用者沒有輸入目錄,則使用預設目錄 if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5674,11 +5674,11 @@ create_backup() { "/home" # 用户数据 ) else - # 將用戶輸入的目錄按空格分隔成數組 + # 將使用者輸入的目錄以空格分隔成數組 IFS=' ' read -r -a BACKUP_PATHS <<< "$input" fi - # 生成備份文件前綴 + # 產生備份檔案前綴 local PREFIX="" for path in "${BACKUP_PATHS[@]}"; do # 提取目錄名稱並去除斜杠 @@ -5686,28 +5686,28 @@ 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" 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 } @@ -5715,12 +5715,12 @@ 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 @@ -5745,11 +5745,11 @@ list_backups() { delete_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 @@ -5764,7 +5764,7 @@ delete_backup() { fi } -# 備份主菜單 +# 備份主選單 linux_backup() { BACKUP_DIR="/backups" mkdir -p "$BACKUP_DIR" @@ -5775,7 +5775,7 @@ linux_backup() { echo "------------------------" list_backups echo "------------------------" - echo "1. 創建備份 2. 恢復備份 3. 刪除備份" + echo "1. 建立備份 2. 恢復備份 3. 刪除備份" echo "------------------------" echo "0. 返回上一級選單" echo "------------------------" @@ -5786,7 +5786,7 @@ linux_backup() { 3) delete_backup ;; *) break ;; esac - read -e -p "按回車鍵繼續..." + read -e -p "按下回車鍵繼續..." done } @@ -5798,29 +5798,29 @@ 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 "請選擇身份驗證方式:" @@ -5834,20 +5834,20 @@ add_connection() { 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" @@ -5862,7 +5862,7 @@ add_connection() { 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 @@ -5886,7 +5886,7 @@ delete_connection() { fi sed -i "${num}d" "$CONFIG_FILE" - echo "連接已刪除!" + echo "連線已刪除!" } # 使用連接 @@ -5896,7 +5896,7 @@ use_connection() { local connection=$(sed -n "${num}p" "$CONFIG_FILE") if [[ -z "$connection" ]]; then - echo "錯誤:未找到對應的連接。" + echo "錯誤:未找到對應的連線。" return fi @@ -5907,10 +5907,10 @@ use_connection() { # 使用密鑰連接 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 # 使用密碼連接 @@ -5923,22 +5923,22 @@ 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 } 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 @@ -5950,11 +5950,11 @@ 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 "------------------------" @@ -5980,92 +5980,92 @@ 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 "分區不存在!" return fi - # 檢查分區是否已經掛載 + # 檢查分割區是否已經掛載 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then echo "分區已經掛載!" return fi - # 創建掛載點 + # 建立掛載點 MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # 掛載分區 + # 掛載分割區 mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then - echo "分區掛載成功:$MOUNT_POINT" + echo "分割區掛載成功:$MOUNT_POINT" else 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 "分區未掛載!" return fi - # 卸載分區 + # 解除安裝分割區 umount "/dev/$PARTITION" if [ $? -eq 0 ]; then - echo "分區卸載成功:$MOUNT_POINT" + echo "分割區卸載成功:$MOUNT_POINT" rmdir "$MOUNT_POINT" else 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 "分區不存在!" 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" @@ -6081,51 +6081,51 @@ format_partition() { 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 + 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" } -# 主菜單 +# 主選單 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 "------------------------" @@ -6138,7 +6138,7 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "按回車鍵繼續..." + read -e -p "按下回車鍵繼續..." done } @@ -6147,27 +6147,27 @@ 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 "- 遠程目錄: /backup/www" - echo "- 端口號 (默認 22)" + 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 "請輸入遠端目錄:" remote_path + read -e -p "請輸入遠端使用者@IP:" remote + read -e -p "請輸入 SSH 連接埠 (預設 22):" port port=${port:-22} echo "請選擇身份驗證方式:" @@ -6182,20 +6182,20 @@ add_task() { 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" @@ -6215,19 +6215,19 @@ 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" install rsync rsync - echo "任務已保存!" + echo "任務已儲存!" } # 刪除任務 @@ -6243,7 +6243,7 @@ delete_task() { 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 @@ -6270,7 +6270,7 @@ run_task() { num="$1" fi - # 如果沒有傳入任務編號,提示用戶輸入 + # 如果沒有傳入任務編號,提示使用者輸入 if [[ -z "$num" ]]; then read -e -p "請輸入要執行的任務編號:" num fi @@ -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,7 +6294,7 @@ 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 @@ -6307,14 +6307,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 @@ -6325,17 +6325,17 @@ run_task() { echo "同步完成!" else echo "同步失敗! 請檢查以下內容:" - echo "1. 網絡連接是否正常" - echo "2. 遠程主機是否可訪問" - echo "3. 認證信息是否正確" - echo "4. 本地和遠程目錄是否有正確的訪問權限" + echo "1. 網路連線是否正常" + echo "2. 遠端主機是否可存取" + echo "3. 認證資訊是否正確" + echo "4. 本機和遠端目錄是否有正確的存取權限" fi } -# 創建定時任務 +# 建立定時任務 schedule_task() { - send_stats "添加同步定時任務" + send_stats "新增同步定時任務" read -e -p "請輸入要定時同步的任務編號:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then @@ -6367,14 +6367,14 @@ schedule_task() { 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 "---------------------------------" @@ -6394,23 +6394,23 @@ delete_task_schedule() { } -# 任務管理主菜單 +# 工作管理員主選單 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 "---------------------------------" @@ -6425,7 +6425,7 @@ rsync_manager() { 0) break ;; *) echo "無效的選擇,請重試。" ;; esac - read -e -p "按回車鍵繼續..." + read -e -p "按下回車鍵繼續..." done } @@ -6440,7 +6440,7 @@ rsync_manager() { linux_info() { clear - send_stats "系統信息查詢" + send_stats "系統資訊查詢" ip_address @@ -6490,9 +6490,9 @@ linux_info() { echo "" - echo -e "系統信息查詢" + echo -e "系統資訊查詢" echo -e "${gl_kjlan}-------------" - echo -e "${gl_kjlan}主機名:${gl_bai}$hostname" + 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}-------------" @@ -6503,24 +6503,24 @@ 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}$swap_info" - echo -e "${gl_kjlan}硬盤佔用:${gl_bai}$disk_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}-------------" - 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}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}-------------" @@ -6541,26 +6541,26 @@ linux_tools() { 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}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}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}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 @@ -6752,28 +6752,28 @@ 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 ;; 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) @@ -6801,12 +6801,12 @@ 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 "------------------------" @@ -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 "無備份" } @@ -6871,7 +6871,7 @@ docker_ssh_migration() { echo -e "${YELLOW}正在備份 Docker 容器...${NC}" docker ps --format '{{.Names}}' - read -e -p "請輸入要備份的容器名(多個空格分隔,回車備份全部運行中容器):" containers + read -e -p "請輸入要備份的容器名稱(多個空格分隔,回車備份全部運行中容器):" containers install tar jq gzip install_docker @@ -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 項目路徑,避免重複打包 + # 記錄已打包過的 Compose 專案路徑,避免重複打包 declare -A PACKED_COMPOSE_PATHS=() for c in "${TARGET_CONTAINERS[@]}"; do @@ -6908,7 +6908,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 -e -p "未檢測到 compose 目錄,請手動輸入路徑:" project_dir + read -e -p "未偵測到 compose 目錄,請手動輸入路徑:" project_dir fi # 如果該 Compose 項目已經打包過,跳過 @@ -6937,12 +6937,12 @@ docker_ssh_migration() { 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 @@ -6961,11 +6961,11 @@ docker_ssh_migration() { 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" @@ -6989,7 +6989,7 @@ docker_ssh_migration() { 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 @@ -6998,7 +6998,7 @@ 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}Compose 項目 [$project_name] 已有容器在運行,跳過還原...${NC}" @@ -7010,7 +7010,7 @@ 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_name] 已解壓到:$original_path${NC}" + echo -e "${GREEN}Compose 項目 [$project_name] 已解壓縮到:$original_path${NC}" cd "$original_path" || return docker compose down || true @@ -7019,7 +7019,7 @@ docker_ssh_migration() { fi done - # --------- 繼續還原普通容器 --------- + # --------- 繼續還原一般容器 --------- echo -e "${BLUE}檢查並還原普通 Docker 容器...${NC}" local has_container=false for json in "$BACKUP_DIR"/*_inspect.json; do @@ -7035,23 +7035,23 @@ 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="" 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 @@ -7062,7 +7062,7 @@ 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 @@ -7074,20 +7074,20 @@ docker_ssh_migration() { 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 下的文件 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,16 +7103,16 @@ docker_ssh_migration() { 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" 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 @@ -7122,7 +7122,7 @@ docker_ssh_migration() { # 刪除備份 # ---------------------------- delete_backup() { - send_stats "Docker備份文件刪除" + send_stats "Docker備份檔案刪除" read -e -p "請輸入要刪除的備份目錄:" BACKUP_DIR [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}備份目錄不存在${NC}"; return; } rm -rf "$BACKUP_DIR" @@ -7130,7 +7130,7 @@ docker_ssh_migration() { } # ---------------------------- - # 主菜單 + # 主選單 # ---------------------------- main_menu() { send_stats "Docker備份遷移還原" @@ -7145,9 +7145,9 @@ docker_ssh_migration() { 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 -e "0. 返回上一層選單" echo "------------------------" read -e -p "請選擇:" choice case $choice in @@ -7179,14 +7179,14 @@ linux_docker() { echo -e "${gl_kjlan}------------------------" 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}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文件" @@ -7195,9 +7195,9 @@ linux_docker() { 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}0. ${gl_bai}返回主選單" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "請輸入你的選擇:" sub_choice @@ -7215,22 +7215,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}" 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 "" @@ -7245,8 +7245,8 @@ linux_docker() { 5) while true; do clear - send_stats "Docker網絡管理" - echo "Docker網絡列表" + send_stats "Docker網路管理" + echo "Docker網路列表" echo "------------------------------------------------------------" docker network ls echo "" @@ -7270,9 +7270,9 @@ linux_docker() { done echo "" - echo "網絡操作" + echo "網路操作" echo "------------------------" - echo "1. 創建網絡" + echo "1. 建立網絡" echo "2. 加入網絡" echo "3. 退出網絡" echo "4. 刪除網絡" @@ -7283,23 +7283,23 @@ linux_docker() { 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,7 +7309,7 @@ linux_docker() { 4) send_stats "刪除網絡" - read -e -p "請輸入要刪除的網絡名:" dockernetwork + read -e -p "請輸入要刪除的網路名稱:" dockernetwork docker network rm $dockernetwork ;; @@ -7323,13 +7323,13 @@ linux_docker() { 6) while true; do clear - send_stats "Docker捲管理" + send_stats "Docker磁碟區管理" echo "Docker卷列表" docker volume ls echo "" echo "卷操作" echo "------------------------" - echo "1. 創建新卷" + echo "1. 建立新卷" echo "2. 刪除指定卷" echo "3. 刪除所有捲" echo "------------------------" @@ -7339,13 +7339,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 @@ -7391,7 +7391,7 @@ linux_docker() { ;; 8) clear - send_stats "Docker源" + send_stats "Docker來源" bash <(curl -sSL https://linuxmirrors.cn/docker.sh) ;; @@ -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]) @@ -7462,60 +7462,60 @@ 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}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}網路線路測速" 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}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}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}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 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) ;; @@ -7571,7 +7571,7 @@ linux_test() { 16) clear - send_stats "ludashi2020三網線路測試" + send_stats "ludashi2020三線線路測試" curl ${gh_proxy}raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh ;; @@ -7583,26 +7583,26 @@ linux_test() { 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) @@ -7632,48 +7632,48 @@ 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}------------------------" 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}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 case $sub_choice in 1) clear - echo "活躍腳本: CPU佔用10-20% 內存佔用20%" + 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容器 @@ -7684,7 +7684,7 @@ linux_Oracle() { -e MEM_UTIL="$mem_util" \ -e SPEEDTEST_INTERVAL="$speedtest_interval" \ fogforest/lookbusy - send_stats "甲骨文云安裝活躍腳本" + send_stats "甲骨文雲安裝活躍腳本" ;; [Nn]) @@ -7699,20 +7699,20 @@ linux_Oracle() { clear docker rm -f lookbusy docker rmi fogforest/lookbusy - send_stats "甲骨文云卸載活躍腳本" + send_stats "甲骨文雲端卸載活躍腳本" ;; 3) clear echo "重裝系統" echo "--------------------------------" - echo -e "${gl_hong}注意:${gl_bai}重裝有風險失聯,不放心者慎用。重裝預計花費15分鐘,請提前備份數據。" + 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) @@ -7732,7 +7732,7 @@ linux_Oracle() { 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 "已取消" @@ -7756,7 +7756,7 @@ linux_Oracle() { 6) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "該功能由jhb大神提供,感謝他!" + echo "此功能由jhb大神提供,感謝他!" send_stats "ipv6修復" ;; 0) @@ -7785,7 +7785,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 } @@ -7834,29 +7834,29 @@ linux_ldnmp() { while true; do clear - # send_stats "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}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}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}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}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}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 @@ -7898,8 +7898,8 @@ linux_ldnmp() { ldnmp_web_on - echo "數據庫地址: mysql" - echo "數據庫名:$dbname" + echo "資料庫位址: mysql" + echo "資料庫名稱:$dbname" echo "使用者名稱:$dbuse" echo "密碼:$dbusepasswd" echo "表前綴: discuz_" @@ -7909,7 +7909,7 @@ linux_ldnmp() { 4) clear - # 可道云桌面 + # 可道雲桌面 webname="可道云桌面" send_stats "安裝$webname" echo "開始部署$webname" @@ -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" ;; @@ -7973,14 +7973,14 @@ linux_ldnmp() { ldnmp_web_on - echo "數據庫地址: mysql" - echo "數據庫端口: 3306" - echo "數據庫名:$dbname" + echo "資料庫位址: mysql" + echo "資料庫連接埠: 3306" + echo "資料庫名稱:$dbname" echo "使用者名稱:$dbuse" echo "密碼:$dbusepasswd" - echo "數據庫前綴: mac_" + echo "資料庫前綴: mac_" echo "------------------------" - echo "安裝成功後登錄後台地址" + echo "安裝成功後登入後台位址" echo "https://$yuming/vip.php" ;; @@ -8011,23 +8011,23 @@ linux_ldnmp() { ldnmp_web_on - echo "數據庫地址: mysql" - echo "數據庫端口: 3306" - echo "數據庫名:$dbname" + echo "資料庫位址: mysql" + echo "資料庫連接埠: 3306" + echo "資料庫名稱:$dbname" echo "使用者名稱:$dbuse" echo "密碼:$dbusepasswd" echo "" echo "redis地址: redis" - echo "redis密碼: 默認不填寫" - echo "redis端口: 6379" + 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 "登錄時右上角如果出現紅色error0請使用如下命令:" + echo "登入時右上角如果出現紅色error0請使用下列指令:" echo "我也很氣憤獨角數卡為啥這麼麻煩,會有這樣的問題!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" @@ -8075,12 +8075,12 @@ linux_ldnmp() { ldnmp_web_on - echo "數據庫地址: mysql" - echo "數據庫名:$dbname" + echo "資料庫位址: mysql" + echo "資料庫名稱:$dbname" echo "使用者名稱:$dbuse" echo "密碼:$dbusepasswd" - echo "表前綴: flarum_" - echo "管理員信息自行設置" + echo "表字首: flarum_" + echo "管理員資訊自行設定" ;; @@ -8113,11 +8113,11 @@ linux_ldnmp() { clear ldnmp_web_on - echo "數據庫前綴: typecho_" - echo "數據庫地址: mysql" + echo "資料庫前綴: typecho_" + echo "資料庫位址: mysql" echo "使用者名稱:$dbuse" echo "密碼:$dbusepasswd" - echo "數據庫名:$dbname" + echo "資料庫名稱:$dbname" ;; @@ -8152,9 +8152,9 @@ linux_ldnmp() { clear ldnmp_web_on - echo "數據庫地址: mysql" - echo "數據庫端口: 3306" - echo "數據庫名:$dbname" + echo "資料庫位址: mysql" + echo "資料庫連接埠: 3306" + echo "資料庫名稱:$dbname" echo "使用者名稱:$dbuse" echo "密碼:$dbusepasswd" ;; @@ -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 "也可以輸入下載鏈接,遠程下載源碼包,直接回車將跳過遠程下載:" url_download + read -e -p "也可以輸入下載鏈接,遠端下載源碼包,直接回車將跳過遠端下載:" url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8223,9 +8223,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 @@ -8235,25 +8235,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 +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 @@ -8278,12 +8278,12 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on prefix="web$(shuf -i 10-99 -n 1)_" - echo "數據庫地址: mysql" - echo "數據庫名:$dbname" + echo "資料庫位址: mysql" + echo "資料庫名稱:$dbname" echo "使用者名稱:$dbuse" echo "密碼:$dbusepasswd" echo "表前綴:$prefix" - echo "管理員登錄信息自行設置" + echo "管理員登入資訊自行設定" ;; @@ -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" @@ -8336,7 +8336,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 install_ssltls certs_status @@ -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 "也可以輸入下載鏈接,遠程下載源碼包,直接回車將跳過遠程下載:" url_download + read -e -p "也可以輸入下載鏈接,遠端下載源碼包,直接回車將跳過遠端下載:" url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8500,15 +8500,15 @@ linux_ldnmp() { 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 "目標服務器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 /home/*.tar.gz | head -1) @@ -8516,7 +8516,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 "文件已傳送至遠程服務器home目錄。" + echo "檔案已傳送至遠端伺服器home目錄。" else echo "未找到要傳送的文件。" fi @@ -8534,9 +8534,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 @@ -8546,13 +8546,13 @@ 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) @@ -8576,14 +8576,14 @@ linux_ldnmp() { 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 @@ -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 @@ -8624,7 +8624,7 @@ linux_ldnmp() { echo "更新LDNMP環境" echo "------------------------" ldnmp_v - echo "發現新版本的組件" + echo "發現新版本的元件" echo "------------------------" check_docker_image_update nginx if [ -n "$update_status" ]; then @@ -8644,7 +8644,7 @@ 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 "------------------------" @@ -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)(回車取得最新版):" 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)(回車取得最新版):" version local version=${version:-8.3} cd /home/web/ cp /home/web/docker-compose.yml /home/web/docker-compose1.yml @@ -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..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8814,31 +8814,31 @@ while true; do 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}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}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}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}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}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}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}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}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}補貨監控工具" @@ -8849,33 +8849,33 @@ while true; do 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}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}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文檔管理平台${gl_kjlan}96. ${color96}2FAuth自託管二步驗證器" + 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}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}------------------------" - 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 fi @@ -9030,8 +9030,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 \ @@ -9074,8 +9074,8 @@ while true; do check_docker_image_update $docker_name clear echo -e "哪吒監控$check_docker $update_status" - echo "開源、輕量、易用的服務器監控與運維工具" - echo "官網搭建文檔: https://nezha.wiki/guide/dashboard.html" + 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 @@ -9154,17 +9154,17 @@ 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 "端口檢測" + 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 "" @@ -9175,7 +9175,7 @@ while true; do fi echo "------------------------" - echo "1. 安裝 2. 更新 3. 卸載" + echo "1. 安裝 2. 更新 3. 卸載" echo "------------------------" echo "0. 返回上一級選單" echo "------------------------" @@ -9185,7 +9185,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 "------------------------" @@ -9221,7 +9221,7 @@ while true; do clear echo "poste.io已經安裝完成" echo "------------------------" - echo "您可以使用以下地址訪問poste.io:" + echo "您可以使用以下地址存取poste.io:" echo "https://$yuming" echo "" @@ -9246,7 +9246,7 @@ while true; do clear echo "poste.io已經安裝完成" echo "------------------------" - echo "您可以使用以下地址訪問poste.io:" + echo "您可以使用以下地址存取poste.io:" echo "https://$yuming" echo "" ;; @@ -9257,7 +9257,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "應用已卸載" + echo "應用程式已解除安裝" ;; *) @@ -9311,7 +9311,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "應用已卸載" + echo "應用程式已解除安裝" } docker_app_plus @@ -9409,7 +9409,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,15 +9563,15 @@ while true; do check_docker_app clear echo -e "雷池服務$check_docker" - echo "雷池是長亭科技開發的WAF站點防火牆程序面板,可以反代站點進行自動化防禦" - echo "視頻介紹: https://www.bilibili.com/video/BV1mZ421T74c?t=0.1" + 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 check_docker_app_ip fi echo "" echo "------------------------" - echo "1. 安裝 2. 更新 3. 重置密碼 4. 卸載" + echo "1. 安裝 2. 更新 3. 重設密碼 4. 解除安裝" echo "------------------------" echo "0. 返回上一級選單" echo "------------------------" @@ -9609,7 +9609,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" ;; *) @@ -9728,8 +9728,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,7 +10276,7 @@ while true; do ip_address echo "已經安裝完成" check_docker_app_ip - echo "初始用戶名密碼均為: admin" + echo "初始使用者名稱密碼均為: admin" } docker_app_update() { @@ -10294,7 +10294,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "應用已卸載" + echo "應用程式已解除安裝" } docker_app_plus @@ -10516,7 +10516,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 @@ -10567,7 +10567,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,7 +10590,7 @@ while true; do clear echo "已經安裝完成" check_docker_app_ip - echo "初始用戶名: admin" + echo "初始使用者名稱: admin" echo "初始密碼: ChangeMe" } @@ -10598,7 +10598,7 @@ while true; do docker_app_update() { cd /opt/jumpserver-installer*/ ./jmsctl.sh upgrade - echo "應用已更新" + echo "應用程式已更新" } @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "應用已卸載" + echo "應用程式已解除安裝" } docker_app_plus @@ -10671,7 +10671,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 @@ -10933,7 +10933,7 @@ while true; do docker_rum() { - read -e -p "設置LibreTV的登錄密碼:" app_passwd + read -e -p "設定LibreTV的登入密碼:" app_passwd docker run -d \ --name libretv \ @@ -10967,8 +10967,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 @@ -10999,7 +10999,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 @@ -11072,8 +11072,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 \ @@ -11174,7 +11174,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) @@ -11183,7 +11183,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 @@ -11203,7 +11203,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11288,7 +11288,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 \ @@ -11405,7 +11405,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 @@ -11566,7 +11566,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 @@ -11632,7 +11632,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 @@ -11707,8 +11707,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} \ @@ -11770,7 +11770,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 @@ -11824,7 +11824,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 @@ -11842,9 +11842,9 @@ 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 + read -e -p "請輸入 WireGuard 網段 (預設 10.13.13.0):" NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11922,9 +11922,9 @@ while true; do 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}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 @@ -11953,16 +11953,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++)) @@ -11975,10 +11975,10 @@ while true; do fi done - # 寫入配置文件 + # 寫入設定檔 echo "$input" > "$CONFIG_FILE" - echo "客戶端配置已保存到$CONFIG_FILE" + echo "客户端配置已保存到 $CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12023,10 +12023,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 @@ -12057,7 +12057,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 @@ -12097,7 +12097,7 @@ 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}" @@ -12105,16 +12105,16 @@ while true; do 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 "目標服務器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) @@ -12122,14 +12122,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 "未找到要傳送的文件。" fi break ;; *) - echo "注意: 目前備份僅包含docker項目,不包含寶塔,1panel等建站面板的數據備份。" + echo "注意: 目前備份僅包含docker項目,不包含寶塔,1panel等建站面板的資料備份。" break ;; esac @@ -12140,26 +12140,26 @@ 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 "回車鍵還原最新的備份,輸入備份檔案名稱還原指定的備份,輸入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 "沒有找到壓縮包。" fi @@ -12186,11 +12186,11 @@ linux_work() { clear send_stats "後台工作區" echo -e "後台工作區" - echo -e "系統將為你提供可以後台常駐運行的工作區,你可以用來執行長時間的任務" - echo -e "即使你斷開SSH,工作區中的任務也不會中斷,後台常駐任務。" - echo -e "${gl_huang}提示:${gl_bai}進入工作區後使用Ctrl+b再單獨按d,退出工作區!" + 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}------------------------" @@ -12207,10 +12207,10 @@ linux_work() { 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}0. ${gl_bai}返回主選單" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "請輸入你的選擇:" sub_choice @@ -12298,9 +12298,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 "------------------------" @@ -12326,16 +12326,16 @@ linux_work() { ;; 22) - read -e -p "請輸入你創建或進入的工作區名稱,如1​​001 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) @@ -12376,35 +12376,35 @@ 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}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}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}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}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 @@ -12412,15 +12412,15 @@ 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 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 @@ -12428,8 +12428,8 @@ linux_Settings() { 2) clear - send_stats "設置你的登錄密碼" - echo "設置你的登錄密碼" + send_stats "設定你的登入密碼" + echo "設定你的登入密碼" passwd ;; 3) @@ -12442,16 +12442,16 @@ 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 "推薦版本: 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 @@ -12488,7 +12488,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 @@ -12517,17 +12517,17 @@ 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) @@ -12538,28 +12538,28 @@ 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端口已修改" + send_stats "SSH連接埠已修改" new_ssh_port elif [[ $new_port -eq 0 ]]; then - send_stats "退出SSH端口修改" + send_stats "退出SSH連接埠修改" break else - echo "端口號無效,請輸入1到65535之間的數字。" + echo "連接埠號碼無效,請輸入1到65535之間的數字。" send_stats "輸入無效SSH端口" break_end fi @@ -12585,7 +12585,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 @@ -12606,26 +12606,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}優先" + 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) @@ -12643,7 +12643,7 @@ EOF 3) clear bash <(curl -L -s jhb.ovh/jb/v6.sh) - echo "該功能由jhb大神提供,感謝他!" + echo "此功能由jhb大神提供,感謝他!" send_stats "ipv6修復" ;; @@ -12662,17 +12662,17 @@ 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 "------------------------" @@ -12680,25 +12680,25 @@ EOF 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 "已設定自訂虛擬內存" ;; *) @@ -12711,8 +12711,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 @@ -12723,13 +12723,13 @@ 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 "------------------------" @@ -12737,10 +12737,10 @@ EOF case $sub_choice in 1) - # 提示用戶輸入新用戶名 + # 提示使用者輸入新使用者名稱 read -e -p "請輸入新用戶名:" new_username - # 創建新用戶並設置密碼 + # 建立新用戶並設定密碼 useradd -m -s /bin/bash "$new_username" passwd "$new_username" @@ -12748,10 +12748,10 @@ EOF ;; 2) - # 提示用戶輸入新用戶名 + # 提示使用者輸入新使用者名稱 read -e -p "請輸入新用戶名:" new_username - # 創建新用戶並設置密碼 + # 建立新用戶並設定密碼 useradd -m -s /bin/bash "$new_username" passwd "$new_username" @@ -12764,21 +12764,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 - # 刪除用戶及其主目錄 + read -e -p "請輸入要刪除的使用者名稱:" username + # 刪除使用者及其主目錄 userdel -r "$username" ;; @@ -12791,12 +12791,12 @@ 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 "" @@ -12805,7 +12805,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[@]})) @@ -12845,37 +12845,37 @@ EOF 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 "1. 中國上海時間 2. 中國香港時間" - echo "3. 日本東京時間 4. 韓國首爾時間" - echo "5. 新加坡時間 6. 印度加爾各答時間" - echo "7. 阿聯酋迪拜時間 8. 澳大利亞悉尼時間" - echo "9. 泰國曼谷時間" + 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 "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 "------------------------" @@ -12929,9 +12929,9 @@ 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 + read -e -p "請輸入新的主機名稱(輸入0退出):" new_hostname if [ -n "$new_hostname" ] && [ "$new_hostname" != "0" ]; then if [ -f /etc/alpine-release ]; then # Alpine @@ -12956,11 +12956,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 @@ -12968,12 +12968,12 @@ 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 "------------------------" @@ -12981,7 +12981,7 @@ EOF case $choice in 1) - send_stats "中國大陸默認源" + send_stats "中國大陸預設來源" bash <(curl -sSL https://linuxmirrors.cn/main.sh) ;; 2) @@ -13011,7 +13011,7 @@ EOF echo "" echo "操作" echo "------------------------" - echo "1. 添加定時任務 2. 刪除定時任務 3. 編輯定時任務" + echo "1. 新增定時任務 2. 刪除定時任務 3. 編輯定時任務" echo "------------------------" echo "0. 返回上一級選單" echo "------------------------" @@ -13019,10 +13019,10 @@ EOF 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 @@ -13047,7 +13047,7 @@ EOF break # 跳出 ;; esac - send_stats "添加定時任務" + send_stats "新增定時任務" ;; 2) read -e -p "請輸入需要刪除任務的關鍵字:" kquest @@ -13077,7 +13077,7 @@ EOF echo "" echo "操作" echo "------------------------" - echo "1. 添加新的解析 2. 刪除解析地址" + echo "1. 新增新的解析 2. 刪除解析位址" echo "------------------------" echo "0. 返回上一級選單" echo "------------------------" @@ -13087,13 +13087,13 @@ EOF 1) read -e -p "請輸入新的解析記錄 格式: 110.25.5.33 kejilion.pro :" addhost echo "$addhost" >> /etc/hosts - send_stats "本地host解析新增" + send_stats "本機host解析新增" ;; 2) read -e -p "請輸入需要刪除的解析內容關鍵字:" delhost sed -i "/$delhost/d" /etc/hosts - send_stats "本地host解析刪除" + send_stats "本機host解析刪除" ;; *) break # 跳出循环,退出菜单 @@ -13115,7 +13115,7 @@ EOF echo "1. 安裝防禦程序" echo "------------------------" echo "2. 查看SSH攔截記錄" - echo "3. 日誌實時監控" + echo "3. 日志实时监控" echo "------------------------" echo "9. 卸載防禦程序" echo "------------------------" @@ -13160,29 +13160,29 @@ 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 "當前流量使用情況,重啟服務器流量計算會清零!" + echo "目前流量使用情況,重啟伺服器流量計算會清除!" output_status echo -e "${gl_kjlan}總接收:${gl_bai}$rx" 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}${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 "------------------------" @@ -13190,13 +13190,13 @@ EOF 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 ~ @@ -13209,8 +13209,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 @@ -13230,15 +13230,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 "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 "------------------------" @@ -13246,7 +13246,7 @@ EOF case $host_dns in 1) - send_stats "生成新密鑰" + send_stats "產生新密鑰" add_sshkey break_end @@ -13260,10 +13260,10 @@ EOF 3) send_stats "查看本機密鑰" echo "------------------------" - echo "公鑰信息" + echo "公鑰資訊" cat ~/.ssh/authorized_keys echo "------------------------" - echo "私鑰信息" + echo "私鑰資訊" cat ~/.ssh/sshkey echo "------------------------" break_end @@ -13281,11 +13281,11 @@ EOF root_use send_stats "電報預警" echo "TG-bot監控預警功能" - echo "視頻介紹: https://youtu.be/vLL-eb3Z_TY" + echo "影片介紹: https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" - echo "您需要配置tg機器人API和接收預警的用戶ID,即可實現本機CPU,內存,硬盤,流量,SSH登錄的實時監控預警" - echo "到達閾值後會向用戶發預警消息" - echo -e "${gl_hui}-關於流量,重啟服務器將重新計算-${gl_bai}" + echo "您需要設定tg機器人API和接收預警的用戶ID,即可實現本機CPU,內存,硬碟,流量,SSH登入的即時監控預警" + echo "到達閾值後會向用戶發送預警訊息" + echo -e "${gl_hui}-關於流量,重啟伺服器將重新計算-${gl_bai}" read -e -p "確定繼續嗎? (Y/N):" choice case "$choice" in @@ -13312,7 +13312,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 @@ -13324,7 +13324,7 @@ EOF clear echo "TG-bot預警系統已啟動" - echo -e "${gl_hui}你還可以將root目錄中的TG-check-notify.sh預警文件放到其他機器上直接使用!${gl_bai}" + echo -e "${gl_hui}你也可以將root目錄中的TG-check-notify.sh預警檔案放到其他機器上直接使用!${gl_bai}" ;; [Nn]) echo "已取消" @@ -13337,7 +13337,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 @@ -13381,7 +13381,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; } @@ -13405,7 +13405,7 @@ EOF 41) clear send_stats "留言板" - echo "訪問科技lion官方留言板,您對腳本有任何想法歡迎留言交流!" + echo "造訪科技lion官方留言板,您對腳本有任何想法歡迎留言交流!" echo "https://board.kejilion.pro" echo "公共密碼: kejilion.sh" ;; @@ -13419,14 +13419,14 @@ EOF 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 "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 "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 @@ -13444,12 +13444,12 @@ 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 -e "[${gl_lv}OK${gl_bai}] 4/10. 設定SSH埠號為${gl_huang}5522${gl_bai}" echo "------------------------------------------------" echo -e "[${gl_lv}OK${gl_bai}] 5/10. 開放所有端口" @@ -13459,7 +13459,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) @@ -13476,7 +13476,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 @@ -13486,7 +13486,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}" ;; @@ -13519,10 +13519,10 @@ EOF fi echo "隱私與安全" - echo "腳本將收集用戶使用功能的數據,優化腳本體驗,製作更多好玩好用的功能" + echo "腳本將收集使用者使用功能的數據,優化腳本體驗,製作更多好玩好用的功能" echo "將收集腳本版本號,使用的時間,系統版本,CPU架構,機器所屬國家和使用的功能的名稱," echo "------------------------------------------------" - echo -e "當前狀態:$status_message" + echo -e "目前狀態:$status_message" echo "--------------------" echo "1. 開啟採集" echo "2. 關閉採集" @@ -13535,8 +13535,8 @@ 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 "已開啟採集" - send_stats "隱私與安全已開啟採集" + echo "已開啟擷取" + send_stats "隱私與安全已開啟擷取" ;; 2) cd ~ @@ -13559,8 +13559,8 @@ EOF 102) clear - send_stats "卸載科技lion腳本" - echo "卸載科技lion腳本" + send_stats "解除安裝科技lion腳本" + echo "解除安裝科技lion腳本" echo "------------------------------------------------" echo "將徹底卸載kejilion腳本,不影響你其他功能" read -e -p "確定繼續嗎? (Y/N):" choice @@ -13613,21 +13613,21 @@ 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 "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 @@ -13638,9 +13638,9 @@ linux_file() { 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 @@ -13649,129 +13649,129 @@ linux_file() { 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 + 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 "編輯文件" ;; 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 "請輸入新文件名:" 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 + 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 "壓縮文件/目錄" + 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 "移動文件或目錄失敗: 目標路徑未指定" + 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 "傳送文件失敗: 文件不存在" 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} # 清除已知主機的舊條目 @@ -13784,7 +13784,7 @@ $remote_password EOF if [ $? -eq 0 ]; then - echo "文件已傳送至遠程服務器home目錄。" + echo "檔案已傳送至遠端伺服器home目錄。" send_stats "文件傳送成功" else echo "文件傳送失敗。" @@ -13797,7 +13797,7 @@ EOF 0) # 返回上一级选单 - send_stats "返回上一級選單菜單" + send_stats "返回上一層選單選單" break ;; *) # 处理无效输入 @@ -13828,10 +13828,10 @@ 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" - # 遍歷服務器並執行命令 + # 遍歷伺服器並執行命令 for ((i=0; i<${#SERVER_ARRAY[@]}; i+=5)); do local name=${SERVER_ARRAY[i]} local hostname=${SERVER_ARRAY[i+1]} @@ -13862,58 +13862,58 @@ fi while true; do clear send_stats "集群控制中心" - echo "服務器集群控制" + echo "伺服器叢集控制" cat ~/cluster/servers.py echo echo -e "${gl_kjlan}------------------------${gl_bai}" - echo -e "${gl_kjlan}服務器列表管理${gl_bai}" - echo -e "${gl_kjlan}1. ${gl_bai}添加服務器${gl_kjlan}2. ${gl_bai}刪除服務器${gl_kjlan}3. ${gl_bai}編輯服務器" - echo -e "${gl_kjlan}4. ${gl_bai}備份集群${gl_kjlan}5. ${gl_bai}還原集群" + echo -e "${gl_kjlan}伺服器清單管理${gl_bai}" + echo -e "${gl_kjlan}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}批次執行任務${gl_bai}" echo -e "${gl_kjlan}11. ${gl_bai}安裝科技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}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}" - 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) - send_stats "添加集群服務器" - read -e -p "服務器名稱:" server_name - read -e -p "服務器IP:" server_ip - read -e -p "服務器端口(22):" server_port + send_stats "新增叢集伺服器" + read -e -p "伺服器名稱:" server_name + read -e -p "伺服器IP:" server_ip + read -e -p "伺服器連接埠(22):" server_port local server_port=${server_port:-22} - read -e -p "服務器用戶名(root):" server_username + read -e -p "伺服器使用者名稱(root):" 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 ;; 2) - send_stats "刪除集群服務器" + send_stats "刪除叢集伺服器" read -e -p "請輸入需要刪除的關鍵字:" rmserver sed -i "/$rmserver/d" ~/cluster/servers.py ;; 3) - send_stats "編輯集群服務器" + send_stats "編輯叢集伺服器" install nano nano ~/cluster/servers.py ;; 4) clear - send_stats "備份集群" - echo -e "請將${gl_huang}/root/cluster/servers.py${gl_bai}文件下載,完成備份!" + 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 @@ -13946,8 +13946,8 @@ while true; do ;; 51) - send_stats "自定義執行命令" - read -e -p "請輸入批量執行的命令:" mingling + send_stats "自訂執行命令" + read -e -p "請輸入批次執行的命令:" mingling run_commands_on_servers "${mingling}" ;; @@ -13970,41 +13970,41 @@ echo "廣告專欄" echo "------------------------" echo "將為用戶提供更簡單優雅的推廣與購買體驗!" echo "" -echo -e "服務器優惠" +echo -e "伺服器優惠" echo "------------------------" echo -e "${gl_lan}萊卡雲 香港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}網址: 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_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 "------------------------" -echo -e "${gl_huang}搬瓦工 49刀每季 美國CN2GIA 日本軟銀 2核心 1G內存 20G硬盤 1T流量每月${gl_bai}" +echo -e "${gl_huang}搬運工 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刀每季 美國CN2GIA 1核心 2G內存 20G硬盤 800G流量每月${gl_bai}" +echo -e "${gl_lan}DMIT 28刀每季 美國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刀每月 東京軟銀 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&?affid=1355&?affid=1355${gl_bai}" echo "------------------------" echo -e "${gl_kjlan}VPS更多熱門優惠${gl_bai}" echo -e "${gl_bai}網址: https://kejilion.pro/topvps/${gl_bai}" echo "------------------------" echo "" -echo -e "域名優惠" +echo -e "網域優惠" echo "------------------------" echo -e "${gl_lan}GNAME 8.8刀首年COM域名 6.68刀首年CC域名${gl_bai}" echo -e "${gl_bai}網址: https://www.gname.com/register?tt=86836&ttcode=KEJILION86836&ttbj=sh${gl_bai}" echo "------------------------" echo "" -echo -e "科技lion周邊" +echo -e "科技lion週邊" 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 "------------------------" @@ -14034,7 +14034,7 @@ while true; do send_stats "腳本已經最新了,無需更新" else echo "發現新版本!" - echo -e "當前版本 v$sh_v最新版本${gl_huang}v$sh_v_new${gl_bai}" + echo -e "目前版本 v$sh_v最新版本${gl_huang}v$sh_v_new${gl_bai}" fi @@ -14047,9 +14047,9 @@ while true; do fi echo "------------------------" - echo "1. 現在更新 2. 開啟自動更新 3. 關閉自動更新" + echo "1. 現在更新 2. 開啟自動更新 3. 關閉自動更新" echo "------------------------" - echo "0. 返回主菜單" + echo "0. 返回主選單" echo "------------------------" read -e -p "請輸入你的選擇:" choice case "$choice" in @@ -14065,7 +14065,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}腳本已更新至最新版本!${gl_huang}v$sh_v_new${gl_bai}" send_stats "腳本已經最新$sh_v_new" break_end ~/kejilion.sh @@ -14117,9 +14117,9 @@ echo "╦╔═╔═╗ ╦╦╦ ╦╔═╗╔╗╔ ╔═╗╦ ╦" echo "╠╩╗║╣ ║║║ ║║ ║║║║ ╚═╗╠═╣" echo "╩ ╩╚═╝╚╝╩╩═╝╩╚═╝╝╚╝o╚═╝╩ ╩" echo -e "科技lion腳本工具箱 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}1. ${gl_bai}系統資訊查詢" echo -e "${gl_kjlan}2. ${gl_bai}系統更新" echo -e "${gl_kjlan}3. ${gl_bai}系統清理" echo -e "${gl_kjlan}4. ${gl_bai}基礎工具" @@ -14127,12 +14127,12 @@ 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}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}14. ${gl_bai}伺服器叢集控制" echo -e "${gl_kjlan}15. ${gl_bai}廣告專欄" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}p. ${gl_bai}幻獸帕魯開服腳本" @@ -14175,70 +14175,70 @@ done k_info() { -send_stats "k命令參考用例" +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 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" -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 "顯示系統信息 k info" +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" +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 "顯示系統資訊 k info" } 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|更新) @@ -14291,7 +14291,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" @@ -14304,13 +14304,13 @@ else swap) shift - send_stats "快速設置虛擬內存" + send_stats "快速設定虛擬記憶體" add_swap "$@" ;; time|时区) shift - send_stats "快速設置時區" + send_stats "快速設定時區" set_timedate "$@" ;; @@ -14358,28 +14358,28 @@ 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 "$@" ;; @@ -14403,15 +14403,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 ;; *) From 5edaf42f5c0ceb496ad69f48365c24766da5fbb4 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 22 Feb 2026 05:20:11 +0000 Subject: [PATCH 21/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202026-02-22=2005:20:11?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 28 ++++++++++++------------ jp/kejilion.sh | 58 +++++++++++++++++++++++++------------------------- kr/kejilion.sh | 36 +++++++++++++++---------------- tw/kejilion.sh | 46 +++++++++++++++++++-------------------- 4 files changed, 84 insertions(+), 84 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 4c642140c..372755eee 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -2540,7 +2540,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 @@ -2559,7 +2559,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 @@ -4460,7 +4460,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}" } @@ -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 setup is completed!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is complete!${gl_bai}" } @@ -6119,7 +6119,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 @@ -7035,7 +7035,7 @@ docker_ssh_migration() { fi IMAGE=$(jq -r '.[0].Config.Image' "$json") - [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}Mirror information not found, skip:$container${NC}"; continue; } + [[ -z "$IMAGE" || "$IMAGE" == "null" ]] && { echo -e "${RED}未找到镜像信息,跳过: $container${NC}"; continue; } # port mapping PORT_ARGS="" @@ -8815,7 +8815,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}------------------------" @@ -9153,7 +9153,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" @@ -12198,7 +12198,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" @@ -12444,7 +12444,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 "------------" @@ -12636,8 +12636,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) @@ -13873,7 +13873,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}" @@ -13990,7 +13990,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 4870130ad..336211dc8 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -59,7 +59,7 @@ CheckFirstRun_true() { # この機能は、機能の埋め込み情報を収集し、現在のスクリプトのバージョン番号、使用時間、システム バージョン、CPU アーキテクチャ、マシンの国、およびユーザーが使用した機能名を記録します。機密情報は含まれませんので、ご安心ください。信じてください! # なぜこの機能が設計されたのでしょうか?その目的は、ユーザーが使いたい機能をより深く理解し、機能をさらに最適化し、ユーザーのニーズを満たす機能をさらに投入することです。 -# send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご不安がある場合はご利用をお断りすることも可能です。 +# send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご心配な場合はご利用をお断りすることも可能です。 @@ -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 "ポートがオープンされました" } @@ -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" ;; @@ -2439,7 +2439,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 +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 @@ -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" ;; @@ -4460,7 +4460,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}" } @@ -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ログインの設定が完了しました!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定は完了です!${gl_bai}" } @@ -5104,7 +5104,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} " @@ -6007,7 +6007,7 @@ mount_partition() { MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションのマウント + # パーティションをマウントする mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "ハードディスク管理機能" while true; do clear - echo "ハードディスクのパーティション管理" + echo "ハードドライブのパーティション管理" echo -e "${gl_huang}この機能は内部テスト中であるため、運用環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions @@ -6167,7 +6167,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 "認証方法を選択してください:" @@ -6270,7 +6270,7 @@ run_task() { num="$1" fi - # タスク番号が渡されない場合、ユーザーは入力を求められます。 + # 如果没有传入任务编号,提示用户输入 if [[ -z "$num" ]]; then read -e -p "実行するタスク番号を入力してください:" num fi @@ -6903,7 +6903,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') @@ -6947,7 +6947,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 - # 卷映射 + # ボリュームマッピング local VOL_ARGS="" for path in $VOL_PATHS; do VOL_ARGS+="-v $path:$path "; done @@ -6955,7 +6955,7 @@ 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 @@ -7186,7 +7186,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 ファイルを編集する" @@ -8815,7 +8815,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}------------------------" @@ -9073,7 +9073,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 @@ -9082,7 +9082,7 @@ while true; do fi echo "" echo "------------------------" - echo "1. 使用する" + echo "1. 使用方法" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -11844,7 +11844,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,) @@ -12198,7 +12198,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" @@ -12636,8 +12636,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "最初にIPv6に切り替えました" - send_stats "最初にIPv6に切り替えました" + echo "IPv6優先に切り替えました" + send_stats "IPv6優先に切り替えました" ;; 3) @@ -12865,7 +12865,7 @@ EOF echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9. タイ・バンコク時間" + echo "9.タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -13873,7 +13873,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}" @@ -13990,7 +13990,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 3237c3e2f..94f8c2c28 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -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 @@ -2759,7 +2759,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 @@ -4460,7 +4460,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}" } @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "하드디스크 관리 기능" while true; do clear - echo "하드 디스크 파티션 관리" + echo "하드 드라이브 파티션 관리" echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions @@ -7145,7 +7145,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 "------------------------" @@ -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 @@ -8815,7 +8815,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}------------------------" @@ -9064,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "네자 빌드" + send_stats "나타 빌드" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,7 +9073,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 @@ -9153,7 +9153,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" @@ -12198,7 +12198,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" @@ -12380,7 +12380,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}사용자/비밀번호 생성기" @@ -12636,8 +12636,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "먼저 IPv6로 전환됨" - send_stats "먼저 IPv6로 전환됨" + echo "IPv6 우선순위로 전환됨" + send_stats "IPv6 우선순위로 전환됨" ;; 3) @@ -13831,7 +13831,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]} @@ -13873,7 +13873,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}" @@ -13990,7 +13990,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 588a1654d..88d4e4ea3 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1260,10 +1260,10 @@ add_swap() { mkswap -f "$partition" done - # 确保 /swapfile 不再被使用 + # 確保 /swapfile 不再被使用 swapoff /swapfile - # 删除旧的 /swapfile + # 刪除舊的 /swapfile rm -f /swapfile # 建立新的 swap 分割區 @@ -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 @@ -3663,7 +3663,7 @@ 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} @@ -4245,9 +4245,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/* @@ -4330,9 +4330,9 @@ root_use send_stats "優化DNS" while true; do clear - echo "优化DNS地址" + echo "優化DNS位址" echo "------------------------" - echo "当前DNS地址" + echo "目前DNS地址" cat /etc/resolv.conf echo "------------------------" echo "" @@ -4650,7 +4650,7 @@ dd_xitong() { 21) - send_stats "重裝rockylinux10" + send_stats "重装rockylinux10" dd_xitong_3 bash reinstall.sh rocky reboot @@ -5262,7 +5262,7 @@ optimize_balanced() { 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 @@ -5357,8 +5357,8 @@ Kernel_optimize() { while true; do clear send_stats "Linux核心調優管理" - echo "Linux系统内核参数优化" - echo "视频介绍: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" + echo "Linux系統核心參數優化" + echo "影片介紹: https://www.bilibili.com/video/BV1Kb421J7yg?t=0.1" echo "------------------------------------------------" echo "提供多種系統參數調優模式,使用者可依自身使用場景進行選擇切換。" echo -e "${gl_huang}提示:${gl_bai}生產環境請謹慎使用!" @@ -5438,7 +5438,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 @@ -6088,13 +6088,13 @@ format_partition() { 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 } @@ -8829,9 +8829,9 @@ while true; do 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}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}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全家桶" @@ -11953,7 +11953,7 @@ while true; do local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" - # 创建目录(如果不存在) + # 建立目錄(如果不存在) mkdir -p "$(dirname "$CONFIG_FILE")" echo "請貼上你的客戶端配置,連續按兩次回車保存:" @@ -11978,7 +11978,7 @@ while true; do # 寫入設定檔 echo "$input" > "$CONFIG_FILE" - echo "客户端配置已保存到 $CONFIG_FILE" + echo "客戶端配置已儲存到$CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12614,7 +12614,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}優先" + echo -e "当前网络优先级设置: ${gl_huang}IPv4${gl_bai}優先" else echo -e "目前網路優先權設定:${gl_huang}IPv6${gl_bai}優先" fi @@ -12971,7 +12971,7 @@ EOF send_stats "換系統更新來源" clear echo "選擇更新來源區域" - echo "接入LinuxMirrors切換系統更新來源" + echo "接入LinuxMirrors切换系统更新源" echo "------------------------" echo "1. 中國大陸【預設】 2. 中國大陸【教育網】 3. 海外地區" echo "------------------------" @@ -13115,7 +13115,7 @@ EOF echo "1. 安裝防禦程序" echo "------------------------" echo "2. 查看SSH攔截記錄" - echo "3. 日志实时监控" + echo "3. 日誌即時監控" echo "------------------------" echo "9. 卸載防禦程序" echo "------------------------" @@ -13947,7 +13947,7 @@ while true; do 51) send_stats "自訂執行命令" - read -e -p "請輸入批次執行的命令:" mingling + read -e -p "请输入批量执行的命令: " mingling run_commands_on_servers "${mingling}" ;; From 5bb0a48d59eb081e45f3e06b5abd4f4b55684ddc Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 1 Mar 2026 05:50:50 +0000 Subject: [PATCH 22/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202026-03-01=2005:50:50?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 56 +++++++++++++++++++++++++------------------------- jp/kejilion.sh | 38 +++++++++++++++++----------------- kr/kejilion.sh | 24 +++++++++++----------- tw/kejilion.sh | 34 +++++++++++++++--------------- 4 files changed, 76 insertions(+), 76 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 372755eee..5a26ea713 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -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 "App has been uninstalled" + echo "App uninstalled" send_stats "uninstall$docker_name" ;; @@ -3906,7 +3906,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" @@ -4003,7 +4003,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) @@ -4460,7 +4460,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}" } @@ -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 setup is complete!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is completed!${gl_bai}" } @@ -6119,7 +6119,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 @@ -6951,7 +6951,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") @@ -7035,7 +7035,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}Mirror information not found, skip:$container${NC}"; continue; } # port mapping PORT_ARGS="" @@ -7479,7 +7479,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}------------------------" @@ -9257,7 +9257,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" ;; *) @@ -9311,7 +9311,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 @@ -9409,7 +9409,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 @@ -10294,7 +10294,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 @@ -10516,7 +10516,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 @@ -10567,7 +10567,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 @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -10671,7 +10671,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 @@ -10999,7 +10999,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11405,7 +11405,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 @@ -11632,7 +11632,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 @@ -11770,7 +11770,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 @@ -11824,7 +11824,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 @@ -12057,7 +12057,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 @@ -12198,7 +12198,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" @@ -13323,7 +13323,7 @@ EOF source ~/.profile clear - echo "TG-bot early warning system has been activated" + echo "TG-bot预警系统已启动" 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]) @@ -13337,7 +13337,7 @@ EOF 26) root_use - send_stats "Fix high-risk SSH vulnerabilities" + 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 diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 336211dc8..4eb463773 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -540,7 +540,7 @@ while true; do docker stop $dockername ;; 4) - send_stats "指定したコンテナを削除します" + send_stats "删除指定容器" read -e -p "コンテナ名を入力してください (複数のコンテナ名はスペースで区切ってください):" dockername docker rm -f $dockername ;; @@ -4460,7 +4460,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}" } @@ -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ログインの設定は完了です!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定が完了しました!${gl_bai}" } @@ -5104,7 +5104,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} " @@ -6138,7 +6138,7 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "続行するには Enter キーを押してください..." + read -e -p "Enter を押して続行します..." done } @@ -6167,7 +6167,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 "認証方法を選択してください:" @@ -6270,7 +6270,7 @@ run_task() { num="$1" fi - # 如果没有传入任务编号,提示用户输入 + # タスク番号が渡されない場合、ユーザーは入力を求められます。 if [[ -z "$num" ]]; then read -e -p "実行するタスク番号を入力してください:" num fi @@ -6425,7 +6425,7 @@ rsync_manager() { 0) break ;; *) echo "選択が無効です。もう一度お試しください。" ;; esac - read -e -p "続行するには Enter キーを押してください..." + read -e -p "Enter を押して続行します..." done } @@ -6501,7 +6501,7 @@ linux_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}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" @@ -6903,7 +6903,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') @@ -7186,7 +7186,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 ファイルを編集する" @@ -8863,7 +8863,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}------------------------" @@ -9073,7 +9073,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 @@ -9082,7 +9082,7 @@ while true; do fi echo "" echo "------------------------" - echo "1. 使用方法" + echo "1. 使用する" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -12198,7 +12198,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" @@ -12850,7 +12850,7 @@ EOF # 現在のシステムのタイムゾーンを取得する local timezone=$(current_timezone) - # 現在のシステム時刻を取得します + # 現在のシステム時刻を取得する local current_time=$(date +"%Y-%m-%d %H:%M:%S") # タイムゾーンと時間を表示する @@ -12865,7 +12865,7 @@ EOF echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9.タイ・バンコク時間" + echo "9. タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -13868,7 +13868,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}システムをクリーンアップする" @@ -13906,7 +13906,7 @@ while true; do 4) clear - send_stats "バックアップクラスタ" + send_stats "バックアップクラスター" echo -e "変更してください${gl_huang}/root/cluster/servers.py${gl_bai}ファイルをダウンロードしてバックアップを完了してください。" break_end ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 94f8c2c28..a46179055 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -2656,7 +2656,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 @@ -4460,7 +4460,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}" } @@ -5056,7 +5056,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 @@ -5092,7 +5092,7 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "스캔할 디렉터리를 지정하세요." + echo "스캔할 디렉터리를 지정하십시오." return fi @@ -7145,7 +7145,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 "------------------------" @@ -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 @@ -7345,7 +7345,7 @@ linux_docker() { ;; 2) - read -e -p "삭제 볼륨 이름을 입력하세요(여러 볼륨 이름을 공백으로 구분하세요):" dockerjuans + read -e -p "삭제 볼륨 이름을 입력하십시오(여러 볼륨 이름을 공백으로 구분하십시오):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -9064,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "나타 빌드" + send_stats "네자 빌드" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,7 +9073,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 @@ -12198,7 +12198,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" @@ -12380,7 +12380,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}사용자/비밀번호 생성기" @@ -13831,7 +13831,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]} diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 88d4e4ea3..d861db085 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -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 @@ -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 @@ -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 @@ -3663,7 +3663,7 @@ 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} @@ -4650,7 +4650,7 @@ dd_xitong() { 21) - send_stats "重装rockylinux10" + send_stats "重裝rockylinux10" dd_xitong_3 bash reinstall.sh rocky reboot @@ -5262,7 +5262,7 @@ optimize_balanced() { 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 @@ -5664,7 +5664,7 @@ create_backup() { echo "- 備份單一目錄: /var/www" echo "- 備份多個目錄: /etc /home /var/log" echo "- 直接回車將使用預設目錄 (/etc /usr /home)" - read -r -p "請輸入要備份的目錄(多個目錄以空格分隔,直接回車則使用預設目錄):" input + read -r -p "请输入要备份的目录(多个目录用空格分隔,直接回车则使用默认目录):" input # 如果使用者沒有輸入目錄,則使用預設目錄 if [ -z "$input" ]; then @@ -5926,7 +5926,7 @@ use_connection() { echo "連線失敗!請檢查以下內容:" echo "1. 使用者名稱和密碼是否正確。" echo "2. 目標伺服器是否允許密碼登入。" - echo "3. 目標伺服器的 SSH 服務是否正常運作。" + echo "3. 目标服务器的 SSH 服务是否正常运行。" fi fi } @@ -6548,7 +6548,7 @@ linux_tools() { 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}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}跑火車屏保" @@ -10276,7 +10276,7 @@ while true; do ip_address echo "已經安裝完成" check_docker_app_ip - echo "初始使用者名稱密碼均為: admin" + echo "初始使用者名稱密碼皆為: admin" } docker_app_update() { @@ -11924,7 +11924,7 @@ while true; do 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}3. Linux用脚本部署WG客户端,复制配置代码连接网络。${gl_bai}" echo -e "${gl_lv}官方客戶端下載方式: https://www.wireguard.com/install/${gl_bai}" break_end @@ -12556,7 +12556,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之間的數字。" @@ -12614,7 +12614,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}優先" + echo -e "目前網路優先權設定:${gl_huang}IPv4${gl_bai}優先" else echo -e "目前網路優先權設定:${gl_huang}IPv6${gl_bai}優先" fi @@ -12971,7 +12971,7 @@ EOF send_stats "換系統更新來源" clear echo "選擇更新來源區域" - echo "接入LinuxMirrors切换系统更新源" + echo "接入LinuxMirrors切換系統更新來源" echo "------------------------" echo "1. 中國大陸【預設】 2. 中國大陸【教育網】 3. 海外地區" echo "------------------------" @@ -13283,7 +13283,7 @@ EOF echo "TG-bot監控預警功能" echo "影片介紹: https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" - echo "您需要設定tg機器人API和接收預警的用戶ID,即可實現本機CPU,內存,硬碟,流量,SSH登入的即時監控預警" + echo "您需要設定tg機器人API和接收預警的使用者ID,即可實現本機CPU,內存,硬碟,流量,SSH登入的即時監控預警" echo "到達閾值後會向用戶發送預警訊息" echo -e "${gl_hui}-關於流量,重啟伺服器將重新計算-${gl_bai}" read -e -p "確定繼續嗎? (Y/N):" choice @@ -13621,7 +13621,7 @@ linux_file() { echo "1. 進入目錄 2. 建立目錄 3. 修改目錄權限 4. 重新命名目錄" echo "5. 刪除目錄 6. 返回上一層選單目錄" echo "------------------------" - echo "11. 建立文件 12. 編輯文件 13. 修改文件權限 14. 重新命名文件" + echo "11. 建立檔案 12. 編輯檔案 13. 修改檔案權限 14. 重新命名文件" echo "15. 刪除文件" echo "------------------------" echo "21. 壓縮檔案目錄 22. 解壓縮檔案目錄 23. 行動檔案目錄 24. 複製檔案目錄" @@ -13947,7 +13947,7 @@ while true; do 51) send_stats "自訂執行命令" - read -e -p "请输入批量执行的命令: " mingling + read -e -p "請輸入批次執行的命令:" mingling run_commands_on_servers "${mingling}" ;; From a66865a9dd47e94a2a98a4909ed4c1a2f9358440 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 8 Mar 2026 05:40:26 +0000 Subject: [PATCH 23/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202026-03-08=2005:40:26?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 62 +++++++++++++++++++++++++------------------------- jp/kejilion.sh | 56 ++++++++++++++++++++++----------------------- kr/kejilion.sh | 40 ++++++++++++++++---------------- tw/kejilion.sh | 26 ++++++++++----------- 4 files changed, 92 insertions(+), 92 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 5a26ea713..ecb062277 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -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 "App uninstalled" + echo "App has been uninstalled" send_stats "uninstall$docker_name" ;; @@ -3906,7 +3906,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" @@ -4003,7 +4003,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) @@ -4460,7 +4460,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}" } @@ -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 setup is completed!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is complete!${gl_bai}" } @@ -6119,7 +6119,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 @@ -7479,7 +7479,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}------------------------" @@ -8225,7 +8225,7 @@ linux_ldnmp() { clear echo -e "[${gl_huang}4/6${gl_bai}] Install specified extension" echo "-------------" - echo "Installed extensions" + echo "已经安装的扩展" docker exec php php -m read -e -p "$(echo -e "输入需要安装的扩展名称,如 ${gl_huang}SourceGuardian imap ftp${gl_bai} 等等。直接回车将跳过安装 : ")" php_extensions @@ -9257,7 +9257,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" ;; *) @@ -9311,7 +9311,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 @@ -9409,7 +9409,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 @@ -10294,7 +10294,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 @@ -10516,7 +10516,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 @@ -10567,7 +10567,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 @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -10671,7 +10671,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 @@ -10999,7 +10999,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11405,7 +11405,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 @@ -11632,7 +11632,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 @@ -11770,7 +11770,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 @@ -11824,7 +11824,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 @@ -12057,7 +12057,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 @@ -12187,7 +12187,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" @@ -12198,7 +12198,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" @@ -12444,7 +12444,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 "------------" @@ -12931,7 +12931,7 @@ EOF local current_hostname=$(uname -n) echo -e "Current hostname:${gl_huang}$current_hostname${gl_bai}" echo "------------------------" - read -e -p "Please enter a new hostname (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 @@ -13323,7 +13323,7 @@ EOF source ~/.profile clear - echo "TG-bot预警系统已启动" + echo "TG-bot early warning system has been activated" 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]) @@ -13337,7 +13337,7 @@ EOF 26) root_use - send_stats "修复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 @@ -13990,7 +13990,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 4eb463773..a94b7ee82 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -540,7 +540,7 @@ while true; do docker stop $dockername ;; 4) - send_stats "删除指定容器" + send_stats "指定したコンテナを削除します" read -e -p "コンテナ名を入力してください (複数のコンテナ名はスペースで区切ってください):" dockername docker rm -f $dockername ;; @@ -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" ;; @@ -1660,7 +1660,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 @@ -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 @@ -2759,7 +2759,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 +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 @@ -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 @@ -4342,7 +4342,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 "------------------------" @@ -4460,7 +4460,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}" } @@ -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ログインの設定が完了しました!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定は完了です!${gl_bai}" } @@ -4586,7 +4586,7 @@ dd_xitong() { echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "再インストールするシステムを選択してください:" sys_choice + read -e -p "请选择要重装的系统: " sys_choice case "$sys_choice" in @@ -6138,7 +6138,7 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "Enter を押して続行します..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -6425,7 +6425,7 @@ rsync_manager() { 0) break ;; *) echo "選択が無効です。もう一度お試しください。" ;; esac - read -e -p "Enter を押して続行します..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -6501,7 +6501,7 @@ linux_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}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" @@ -7186,7 +7186,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 ファイルを編集する" @@ -8246,7 +8246,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 @@ -9073,7 +9073,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 @@ -9082,7 +9082,7 @@ while true; do fi echo "" echo "------------------------" - echo "1. 使用する" + echo "1. 使用方法" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -12187,8 +12187,8 @@ linux_work() { send_stats "バックエンドワークスペース" echo -e "バックエンドワークスペース" echo -e "システムは、バックグラウンドで永続的に実行できるワークスペースを提供し、長期的なタスクを実行するために使用できます。" - echo -e "SSH を切断しても、ワークスペース内のタスクは中断されず、タスクはバックグラウンドで残ります。" - echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、d だけを押してワークスペースを終了します。" + echo -e "SSH を切断しても、ワークスペース内のタスクは中断されず、バックグラウンド タスクは継続されます。" + echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、次に d を単独で押してワークスペースを終了します。" echo -e "${gl_kjlan}------------------------" echo "現在存在するワークスペースのリスト" echo -e "${gl_kjlan}------------------------" @@ -12198,7 +12198,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" @@ -12378,7 +12378,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}------------------------" @@ -13421,7 +13421,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,7 +13871,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}" @@ -13990,7 +13990,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 "" @@ -14139,7 +14139,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 @@ -14175,7 +14175,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 a46179055..4b3b346cb 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1291,7 +1291,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 가상 메모리를 만들어야 하는지 확인 +# 가상 메모리를 생성해야 하는지 결정 [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -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) - # 획득한 시간을 확인하세요. + # 획득한 시간을 확인 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) @@ -2656,7 +2656,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 @@ -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 @@ -2759,7 +2759,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 +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 @@ -4460,7 +4460,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}" } @@ -5056,7 +5056,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 @@ -6094,7 +6094,7 @@ format_partition() { if [ $? -eq 0 ]; then echo "파티션이 성공적으로 포맷되었습니다!" else - echo "파티션 포맷에 실패했습니다!" + echo "分区格式化失败!" fi } @@ -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 @@ -9064,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "네자 빌드" + send_stats "나타 빌드" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,7 +9073,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 @@ -9185,7 +9185,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 "------------------------" @@ -12187,7 +12187,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 "현재 존재하는 작업공간 목록" @@ -12198,7 +12198,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" @@ -12300,7 +12300,7 @@ linux_work() { echo -e "SSH 상주 모드${tmux_sshd_status}" echo "SSH 연결을 연 후 바로 상주 모드로 들어가고 이전 작업 상태로 바로 돌아갑니다." echo "------------------------" - echo "1. 켜기 2. 끄기" + echo "1. 켜짐 2. 꺼짐" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -12850,7 +12850,7 @@ EOF # 현재 시스템 시간대 가져오기 local timezone=$(current_timezone) - # 현재 시스템 시간을 가져옵니다 + # 현재 시스템 시간 가져오기 local current_time=$(date +"%Y-%m-%d %H:%M:%S") # 시간대 및 시간 표시 @@ -13831,7 +13831,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]} @@ -13990,7 +13990,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 "" @@ -14175,7 +14175,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 d861db085..8a8e77e9e 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -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 @@ -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 @@ -5664,7 +5664,7 @@ create_backup() { echo "- 備份單一目錄: /var/www" echo "- 備份多個目錄: /etc /home /var/log" echo "- 直接回車將使用預設目錄 (/etc /usr /home)" - read -r -p "请输入要备份的目录(多个目录用空格分隔,直接回车则使用默认目录):" input + read -r -p "請輸入要備份的目錄(多個目錄以空格分隔,直接回車則使用預設目錄):" input # 如果使用者沒有輸入目錄,則使用預設目錄 if [ -z "$input" ]; then @@ -5926,7 +5926,7 @@ use_connection() { echo "連線失敗!請檢查以下內容:" echo "1. 使用者名稱和密碼是否正確。" echo "2. 目標伺服器是否允許密碼登入。" - echo "3. 目标服务器的 SSH 服务是否正常运行。" + echo "3. 目標伺服器的 SSH 服務是否正常運作。" fi fi } @@ -6548,7 +6548,7 @@ linux_tools() { 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}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}跑火車屏保" @@ -10276,7 +10276,7 @@ while true; do ip_address echo "已經安裝完成" check_docker_app_ip - echo "初始使用者名稱密碼皆為: admin" + echo "初始使用者名稱密碼均為: admin" } docker_app_update() { @@ -11924,7 +11924,7 @@ while true; do 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}3. Linux用腳本部署WG客戶端,複製設定碼連接網路。${gl_bai}" echo -e "${gl_lv}官方客戶端下載方式: https://www.wireguard.com/install/${gl_bai}" break_end @@ -12556,7 +12556,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之間的數字。" @@ -12662,10 +12662,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}') @@ -13283,7 +13283,7 @@ EOF echo "TG-bot監控預警功能" echo "影片介紹: https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" - echo "您需要設定tg機器人API和接收預警的使用者ID,即可實現本機CPU,內存,硬碟,流量,SSH登入的即時監控預警" + echo "您需要設定tg機器人API和接收預警的用戶ID,即可實現本機CPU,內存,硬碟,流量,SSH登入的即時監控預警" echo "到達閾值後會向用戶發送預警訊息" echo -e "${gl_hui}-關於流量,重啟伺服器將重新計算-${gl_bai}" read -e -p "確定繼續嗎? (Y/N):" choice @@ -13621,7 +13621,7 @@ linux_file() { echo "1. 進入目錄 2. 建立目錄 3. 修改目錄權限 4. 重新命名目錄" echo "5. 刪除目錄 6. 返回上一層選單目錄" echo "------------------------" - echo "11. 建立檔案 12. 編輯檔案 13. 修改檔案權限 14. 重新命名文件" + echo "11. 建立文件 12. 編輯文件 13. 修改文件權限 14. 重新命名文件" echo "15. 刪除文件" echo "------------------------" echo "21. 壓縮檔案目錄 22. 解壓縮檔案目錄 23. 行動檔案目錄 24. 複製檔案目錄" @@ -13867,7 +13867,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}" From 40e0e87033292a1bc0505e91070c5d8bfda7c8ae Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 15 Mar 2026 05:39:52 +0000 Subject: [PATCH 24/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202026-03-15=2005:39:52?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 24 ++++++++-------- jp/kejilion.sh | 74 +++++++++++++++++++++++++------------------------- kr/kejilion.sh | 52 +++++++++++++++++------------------ tw/kejilion.sh | 20 +++++++------- 4 files changed, 85 insertions(+), 85 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index ecb062277..5cae64307 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -2540,7 +2540,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 @@ -2559,7 +2559,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 @@ -6951,7 +6951,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") @@ -8225,7 +8225,7 @@ linux_ldnmp() { clear echo -e "[${gl_huang}4/6${gl_bai}] Install 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 @@ -9153,7 +9153,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" @@ -12187,7 +12187,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" @@ -12198,7 +12198,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" @@ -12444,7 +12444,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 "------------" @@ -12636,8 +12636,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) @@ -12931,7 +12931,7 @@ EOF local current_hostname=$(uname -n) echo -e "Current hostname:${gl_huang}$current_hostname${gl_bai}" echo "------------------------" - read -e -p "请输入新的主机名(输入0退出): " 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 @@ -13990,7 +13990,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 a94b7ee82..e5cc1b145 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -1185,7 +1185,7 @@ iptables_panel() { ;; 6) # IPブラックリスト - read -e -p "ブロックされた IP または IP 範囲を入力してください:" c_ip + read -e -p "请输入封锁的IP或IP段: " c_ip block_ip $c_ip ;; 7) @@ -1660,7 +1660,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 @@ -2439,7 +2439,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) @@ -2759,7 +2759,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 @@ -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 @@ -3824,7 +3824,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}" @@ -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" ;; @@ -4586,7 +4586,7 @@ dd_xitong() { echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" - read -e -p "请选择要重装的系统: " sys_choice + read -e -p "再インストールするシステムを選択してください:" sys_choice case "$sys_choice" in @@ -5104,7 +5104,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} " @@ -6007,7 +6007,7 @@ mount_partition() { MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションをマウントする + # パーティションのマウント mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then @@ -6138,7 +6138,7 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "続行するには Enter キーを押してください..." + read -e -p "Enter を押して続行します..." done } @@ -6425,7 +6425,7 @@ rsync_manager() { 0) break ;; *) echo "選択が無効です。もう一度お試しください。" ;; esac - read -e -p "続行するには Enter キーを押してください..." + read -e -p "Enter を押して続行します..." done } @@ -6540,10 +6540,10 @@ 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通信接続ツール" - 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}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}ffmpeg ビデオエンコードライブストリーミングツール" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}11. ${gl_bai}btop 最新の監視ツール${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}レンジャーファイル管理ツール" @@ -6551,7 +6551,7 @@ linux_tools() { 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}------------------------" @@ -7186,7 +7186,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 ファイルを編集する" @@ -7329,7 +7329,7 @@ linux_docker() { echo "" echo "ボリューム操作" echo "------------------------" - echo "1. 新しいボリュームを作成する" + echo "1. 新しいボリュームを作成します" echo "2. 指定したボリュームを削除します" echo "3. すべてのボリュームを削除します" echo "------------------------" @@ -7663,7 +7663,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} @@ -7938,7 +7938,7 @@ linux_ldnmp() { echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" echo "データベース名:$dbname" - echo "redisホスト: redis" + echo "redis主机: redis" ;; @@ -8246,7 +8246,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 @@ -8863,7 +8863,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}------------------------" @@ -12187,8 +12187,8 @@ linux_work() { send_stats "バックエンドワークスペース" echo -e "バックエンドワークスペース" echo -e "システムは、バックグラウンドで永続的に実行できるワークスペースを提供し、長期的なタスクを実行するために使用できます。" - echo -e "SSH を切断しても、ワークスペース内のタスクは中断されず、バックグラウンド タスクは継続されます。" - echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、次に d を単独で押してワークスペースを終了します。" + echo -e "SSH を切断しても、ワークスペース内のタスクは中断されず、タスクはバックグラウンドで残ります。" + echo -e "${gl_huang}ヒント:${gl_bai}ワークスペースに入ったら、Ctrl+b を使用し、d だけを押してワークスペースを終了します。" echo -e "${gl_kjlan}------------------------" echo "現在存在するワークスペースのリスト" echo -e "${gl_kjlan}------------------------" @@ -12198,7 +12198,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" @@ -12378,7 +12378,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}------------------------" @@ -12636,8 +12636,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "IPv6優先に切り替えました" - send_stats "IPv6優先に切り替えました" + echo "最初にIPv6に切り替えました" + send_stats "最初にIPv6に切り替えました" ;; 3) @@ -12850,7 +12850,7 @@ EOF # 現在のシステムのタイムゾーンを取得する local timezone=$(current_timezone) - # 現在のシステム時刻を取得する + # 現在のシステム時刻を取得します local current_time=$(date +"%Y-%m-%d %H:%M:%S") # タイムゾーンと時間を表示する @@ -12865,7 +12865,7 @@ EOF echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9. タイ・バンコク時間" + echo "9.タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -13421,7 +13421,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}" @@ -13519,7 +13519,7 @@ EOF fi echo "プライバシーとセキュリティ" - echo "スクリプトはユーザーの機能使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" + echo "スクリプトはユーザーによる機能の使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" echo "スクリプトのバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、使用された機能の名前が収集されます。" echo "------------------------------------------------" echo -e "現在のステータス:$status_message" @@ -13871,7 +13871,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}" @@ -13990,7 +13990,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 "" @@ -14139,7 +14139,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 @@ -14175,7 +14175,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 4b3b346cb..6f229f775 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1291,7 +1291,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 가상 메모리를 생성해야 하는지 결정 +# 가상 메모리를 만들어야 하는지 확인 [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -2112,7 +2112,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 +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) - # 획득한 시간을 확인 + # 획득한 시간을 확인하세요. 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) @@ -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 @@ -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 @@ -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" ;; @@ -5598,7 +5598,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 "------------------------" @@ -6094,7 +6094,7 @@ format_partition() { if [ $? -eq 0 ]; then echo "파티션이 성공적으로 포맷되었습니다!" else - echo "分区格式化失败!" + echo "파티션 포맷에 실패했습니다!" fi } @@ -6333,7 +6333,7 @@ run_task() { } -# 예약된 작업 만들기 +# 创建定时任务 schedule_task() { send_stats "동기화 예약 작업 추가" @@ -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 @@ -7345,7 +7345,7 @@ linux_docker() { ;; 2) - read -e -p "삭제 볼륨 이름을 입력하십시오(여러 볼륨 이름을 공백으로 구분하십시오):" dockerjuans + read -e -p "삭제 볼륨 이름을 입력하세요(여러 볼륨 이름을 공백으로 구분하세요):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -9073,7 +9073,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 @@ -9153,7 +9153,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" @@ -9185,7 +9185,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 "------------------------" @@ -12187,7 +12187,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 "현재 존재하는 작업공간 목록" @@ -12198,7 +12198,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" @@ -12300,7 +12300,7 @@ linux_work() { echo -e "SSH 상주 모드${tmux_sshd_status}" echo "SSH 연결을 연 후 바로 상주 모드로 들어가고 이전 작업 상태로 바로 돌아갑니다." echo "------------------------" - echo "1. 켜짐 2. 꺼짐" + echo "1. 켜기 2. 끄기" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -12636,8 +12636,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "IPv6 우선순위로 전환됨" - send_stats "IPv6 우선순위로 전환됨" + echo "먼저 IPv6로 전환됨" + send_stats "먼저 IPv6로 전환됨" ;; 3) @@ -12850,7 +12850,7 @@ EOF # 현재 시스템 시간대 가져오기 local timezone=$(current_timezone) - # 현재 시스템 시간 가져오기 + # 현재 시스템 시간을 가져옵니다 local current_time=$(date +"%Y-%m-%d %H:%M:%S") # 시간대 및 시간 표시 @@ -12870,7 +12870,7 @@ EOF echo "유럽" echo "11. 영국 런던 시간 12. 프랑스 파리 시간" echo "13. 독일 베를린 시간 14. 러시아 모스크바 시간" - echo "15. 네덜란드 유트라흐트 시간 16. 스페인 마드리드 시간" + echo "15. 네덜란드 위트라흐트 시간 16. 스페인 마드리드 시간" echo "------------------------" echo "미국" echo "21. 미국 서부 시간 22. 미국 동부 시간" @@ -12938,7 +12938,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 @@ -13831,7 +13831,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]} @@ -13990,7 +13990,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 "" @@ -14175,7 +14175,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 8a8e77e9e..01c4e0451 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1712,7 +1712,7 @@ 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:]') @@ -5511,7 +5511,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 @@ -5597,7 +5597,7 @@ 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 "回收站為空" @@ -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" # 記錄已打包過的 Compose 專案路徑,避免重複打包 declare -A PACKED_COMPOSE_PATHS=() @@ -12662,10 +12662,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}') @@ -12873,7 +12873,7 @@ EOF echo "15. 荷蘭尤特賴赫特時間 16. 西班牙馬德里時間" echo "------------------------" echo "美洲" - echo "21. 美國西部時間 22. 美國東部時間" + echo "21. 美国西部时间 22. 美国东部时间" echo "23. 加拿大時間 24. 墨西哥時間" echo "25. 巴西時間 26. 阿根廷時間" echo "------------------------" @@ -13701,11 +13701,11 @@ 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 "移動檔案或目錄失敗: 檔案或目錄不存在" @@ -13867,7 +13867,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}" From 443326a5ca11a973909c57088c74b15910227760 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 22 Mar 2026 05:19:00 +0000 Subject: [PATCH 25/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202026-03-22=2005:19:00?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 74 +++++++++++++++++++++++++------------------------- jp/kejilion.sh | 70 +++++++++++++++++++++++------------------------ kr/kejilion.sh | 48 ++++++++++++++++---------------- tw/kejilion.sh | 36 ++++++++++++------------ 4 files changed, 114 insertions(+), 114 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 5cae64307..9721c2969 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -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. @@ -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 "App has been uninstalled" + echo "App uninstalled" send_stats "uninstall$docker_name" ;; @@ -3906,7 +3906,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" @@ -4003,7 +4003,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) @@ -4460,7 +4460,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}" } @@ -4778,7 +4778,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 @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "Website optimization mode" + send_stats "Website optimization model" ;; 4) cd ~ @@ -5654,9 +5654,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 @@ -5698,7 +5698,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[@]}" @@ -6537,7 +6537,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}" @@ -7479,7 +7479,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}------------------------" @@ -8815,7 +8815,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}------------------------" @@ -9153,7 +9153,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" @@ -9257,7 +9257,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" ;; *) @@ -9311,7 +9311,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 @@ -9409,7 +9409,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 @@ -10294,7 +10294,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 @@ -10516,7 +10516,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 @@ -10567,7 +10567,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 @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "App has been uninstalled" + echo "App uninstalled" } docker_app_plus @@ -10671,7 +10671,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 @@ -10999,7 +10999,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11405,7 +11405,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 @@ -11632,7 +11632,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 @@ -11770,7 +11770,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 @@ -11824,7 +11824,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 @@ -12057,7 +12057,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 @@ -12444,7 +12444,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 "------------" @@ -13175,7 +13175,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 @@ -13433,7 +13433,7 @@ EOF case "$choice" in [Yy]) clear - send_stats "One-stop tuning starts" + send_stats "One-stop tuning started" echo "------------------------------------------------" linux_update echo -e "[${gl_lv}OK${gl_bai}] 1/10. Update the system to the latest" @@ -13839,7 +13839,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 @@ -13873,7 +13873,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}" @@ -13990,7 +13990,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 "" @@ -14175,7 +14175,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 e5cc1b145..8ef709e37 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -57,7 +57,7 @@ CheckFirstRun_true() { -# この機能は、機能の埋め込み情報を収集し、現在のスクリプトのバージョン番号、使用時間、システム バージョン、CPU アーキテクチャ、マシンの国、およびユーザーが使用した機能名を記録します。機密情報は含まれませんので、ご安心ください。信じてください! +# 関数の埋もれた情報を収集し、現在のスクリプトのバージョン番号、使用時間、システム バージョン、CPU アーキテクチャ、マシンの国、ユーザーが使用した関数名を記録する機能。機密情報は含まれませんので、ご安心ください。信じてください! # なぜこの機能が設計されたのでしょうか?その目的は、ユーザーが使いたい機能をより深く理解し、機能をさらに最適化し、ユーザーのニーズを満たす機能をさらに投入することです。 # send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご心配な場合はご利用をお断りすることも可能です。 @@ -1185,7 +1185,7 @@ iptables_panel() { ;; 6) # IPブラックリスト - read -e -p "请输入封锁的IP或IP段: " c_ip + read -e -p "ブロックされた IP または IP 範囲を入力してください:" c_ip block_ip $c_ip ;; 7) @@ -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" ;; @@ -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 @@ -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 @@ -3824,7 +3824,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}" @@ -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" ;; @@ -4460,7 +4460,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}" } @@ -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" @@ -5104,7 +5104,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} " @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "ウェブサイト最適化モード" + send_stats "ウェブサイト最適化モデル" ;; 4) cd ~ @@ -5654,9 +5654,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") # ユーザーにバックアップ ディレクトリの入力を求めるプロンプトを表示する @@ -5698,7 +5698,7 @@ create_backup() { echo "- $path" done - # バックアップの作成 + # バックアップを作成する echo "バックアップの作成$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" @@ -5986,9 +5986,9 @@ list_partitions() { lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# パーティションのマウント +# パーティションをマウントする mount_partition() { - send_stats "パーティションのマウント" + send_stats "パーティションをマウントする" read -e -p "マウントするパーティションの名前を入力してください (例: sda1):" PARTITION # パーティションが存在するかどうかを確認する @@ -6007,7 +6007,7 @@ mount_partition() { MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションのマウント + # パーティションをマウントする mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then @@ -6537,13 +6537,13 @@ 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}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}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}ffmpeg ビデオエンコードライブストリーミングツール" echo -e "${gl_kjlan}------------------------" echo -e "${gl_kjlan}11. ${gl_bai}btop 最新の監視ツール${gl_huang}★${gl_bai} ${gl_kjlan}12. ${gl_bai}レンジャーファイル管理ツール" @@ -6551,7 +6551,7 @@ linux_tools() { 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}------------------------" @@ -7186,7 +7186,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 ファイルを編集する" @@ -7663,7 +7663,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} @@ -7938,7 +7938,7 @@ linux_ldnmp() { echo "ユーザー名:$dbuse" echo "パスワード:$dbusepasswd" echo "データベース名:$dbname" - echo "redis主机: redis" + echo "redisホスト: redis" ;; @@ -8815,7 +8815,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}------------------------" @@ -12378,7 +12378,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}------------------------" @@ -13175,7 +13175,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 @@ -13433,7 +13433,7 @@ EOF case "$choice" in [Yy]) clear - send_stats "ワンストップチューニングが始まります" + send_stats "ワンストップチューニングスタート" echo "------------------------------------------------" linux_update echo -e "[${gl_lv}OK${gl_bai}】1/10。システムを最新のものにアップデートする" @@ -13519,7 +13519,7 @@ EOF fi echo "プライバシーとセキュリティ" - echo "スクリプトはユーザーによる機能の使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" + echo "スクリプトはユーザーの機能使用に関するデータを収集し、スクリプト エクスペリエンスを最適化し、より楽しくて便利な機能を作成します。" echo "スクリプトのバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、使用された機能の名前が収集されます。" echo "------------------------------------------------" echo -e "現在のステータス:$status_message" @@ -13839,7 +13839,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 @@ -13873,7 +13873,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}" @@ -13990,7 +13990,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 "" @@ -14175,7 +14175,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 6f229f775..946c7dced 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -57,9 +57,9 @@ CheckFirstRun_true() { -# 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! +# 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기기 국가 및 기능 이름을 기록하는 기능입니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. -# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 불편하신 점이 있으시면 이용을 거부하실 수 있습니다. +# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. @@ -2112,7 +2112,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}" @@ -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 @@ -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" ;; @@ -4460,7 +4460,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}" } @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "웹사이트 최적화 모드" + send_stats "웹사이트 최적화 모델" ;; 4) cd ~ @@ -5598,7 +5598,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 "------------------------" @@ -6333,7 +6333,7 @@ run_task() { } -# 创建定时任务 +# 예약된 작업 만들기 schedule_task() { send_stats "동기화 예약 작업 추가" @@ -8336,7 +8336,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 install_ssltls certs_status @@ -8815,7 +8815,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}------------------------" @@ -9073,7 +9073,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 @@ -9153,7 +9153,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" @@ -12380,7 +12380,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}사용자/비밀번호 생성기" @@ -12870,7 +12870,7 @@ EOF echo "유럽" echo "11. 영국 런던 시간 12. 프랑스 파리 시간" echo "13. 독일 베를린 시간 14. 러시아 모스크바 시간" - echo "15. 네덜란드 위트라흐트 시간 16. 스페인 마드리드 시간" + echo "15. 네덜란드 유트라흐트 시간 16. 스페인 마드리드 시간" echo "------------------------" echo "미국" echo "21. 미국 서부 시간 22. 미국 동부 시간" @@ -12938,7 +12938,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 @@ -13175,7 +13175,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 @@ -13421,7 +13421,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}" @@ -13433,7 +13433,7 @@ EOF case "$choice" in [Yy]) clear - send_stats "원스톱 튜닝 시작" + send_stats "원스톱 튜닝이 시작되었습니다" echo "------------------------------------------------" linux_update echo -e "[${gl_lv}OK${gl_bai}] 1/10. 시스템을 최신으로 업데이트하세요" @@ -13839,7 +13839,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 @@ -13873,7 +13873,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}" @@ -13914,7 +13914,7 @@ while true; do 5) clear send_stats "클러스터 복원" - echo "server.py를 업로드하고 아무 키나 눌러 업로드를 시작하세요!" + echo "귀하의 server.py를 업로드하고 업로드를 시작하려면 아무 키나 누르십시오!" echo -e "업로드해주세요${gl_huang}servers.py${gl_bai}파일을 제출하다${gl_huang}/root/cluster/${gl_bai}복원 완료!" break_end ;; @@ -13990,7 +13990,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 "" @@ -14175,7 +14175,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 01c4e0451..8a9ded8a2 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -1250,7 +1250,7 @@ iptables_panel() { add_swap() { local new_swap=$1 # 获取传入的参数 - # 取得目前系統中所有的 swap 分割區 + # 取得目前系統中所有的 swap 分區 local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') # 遍歷並刪除所有的 swap 分割區 @@ -1712,7 +1712,7 @@ 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:]') @@ -5511,7 +5511,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 @@ -5597,7 +5597,7 @@ 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 "回收站為空" @@ -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" # 記錄已打包過的 Compose 專案路徑,避免重複打包 declare -A PACKED_COMPOSE_PATHS=() @@ -10276,7 +10276,7 @@ while true; do ip_address echo "已經安裝完成" check_docker_app_ip - echo "初始使用者名稱密碼均為: admin" + echo "初始使用者名稱密碼皆為: admin" } docker_app_update() { @@ -12556,7 +12556,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之間的數字。" @@ -12873,7 +12873,7 @@ EOF echo "15. 荷蘭尤特賴赫特時間 16. 西班牙馬德里時間" echo "------------------------" echo "美洲" - echo "21. 美国西部时间 22. 美国东部时间" + echo "21. 美國西部時間 22. 美國東部時間" echo "23. 加拿大時間 24. 墨西哥時間" echo "25. 巴西時間 26. 阿根廷時間" echo "------------------------" @@ -13701,11 +13701,11 @@ 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 "移動檔案或目錄失敗: 檔案或目錄不存在" @@ -13756,7 +13756,7 @@ linux_file() { read -e -p "請輸入遠端伺服器IP:" remote_ip if [ -z "$remote_ip" ]; then echo "錯誤: 請輸入遠端伺服器IP。" - send_stats "傳送檔案失敗: 未輸入遠端伺服器IP" + send_stats "传送文件失败: 未输入远端服务器IP" continue fi @@ -13872,7 +13872,7 @@ while true; do echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}批次執行任務${gl_bai}" echo -e "${gl_kjlan}11. ${gl_bai}安裝科技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}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}" echo -e "${gl_kjlan}0. ${gl_bai}返回主選單" @@ -13895,7 +13895,7 @@ while true; do ;; 2) send_stats "刪除叢集伺服器" - read -e -p "請輸入需要刪除的關鍵字:" rmserver + read -e -p "请输入需要删除的关键字: " rmserver sed -i "/$rmserver/d" ~/cluster/servers.py ;; 3) @@ -13907,7 +13907,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 ;; @@ -14030,11 +14030,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}你已經是最新版本!${gl_huang}v$sh_v${gl_bai}" + echo -e "${gl_lv}你已经是最新版本!${gl_huang}v$sh_v${gl_bai}" send_stats "腳本已經最新了,無需更新" else echo "發現新版本!" - echo -e "目前版本 v$sh_v最新版本${gl_huang}v$sh_v_new${gl_bai}" + echo -e "当前版本 v$sh_v最新版本${gl_huang}v$sh_v_new${gl_bai}" fi @@ -14208,7 +14208,7 @@ 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 "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 負載平衡" @@ -14403,7 +14403,7 @@ else shift case $1 in install|安装) - send_stats "快速安裝docker" + send_stats "快捷安装docker" install_docker ;; ps|容器) From 76f97db01107c4af33dd245a9ec6dfc1eace1fa6 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 29 Mar 2026 05:58:40 +0000 Subject: [PATCH 26/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202026-03-29=2005:58:40?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 40 +++++++++++++------------- jp/kejilion.sh | 76 +++++++++++++++++++++++++------------------------- kr/kejilion.sh | 56 ++++++++++++++++++------------------- tw/kejilion.sh | 60 +++++++++++++++++++-------------------- 4 files changed, 116 insertions(+), 116 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 9721c2969..23f22ff28 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. @@ -4460,7 +4460,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}" } @@ -4778,7 +4778,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 @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "Website optimization model" + send_stats "Website optimization mode" ;; 4) cd ~ @@ -5654,9 +5654,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 @@ -5698,7 +5698,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[@]}" @@ -6537,7 +6537,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}" @@ -7479,7 +7479,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}------------------------" @@ -7651,7 +7651,7 @@ linux_Oracle() { 1) clear echo "Active script: CPU usage 10-20% Memory usage 20%" - read -e -p "Are you sure you want to install it? (Y/N):" choice + read -e -p "确定安装吗? (Y/N):" choice case "$choice" in [Yy]) @@ -7664,7 +7664,7 @@ linux_Oracle() { local DEFAULT_SPEEDTEST_INTERVAL=120 # 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 + 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 (e.g. 10-20) [Default:$DEFAULT_CPU_UTIL]: " cpu_util @@ -8815,7 +8815,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}------------------------" @@ -12198,7 +12198,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" @@ -12637,7 +12637,7 @@ EOF 2) rm -f /etc/gai.conf echo "Switched to IPv6 first" - send_stats "Switched to IPv6 first" + send_stats "Switched to IPv6 priority" ;; 3) @@ -13175,7 +13175,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 @@ -13433,7 +13433,7 @@ EOF case "$choice" in [Yy]) clear - send_stats "One-stop tuning started" + send_stats "One-stop tuning starts" echo "------------------------------------------------" linux_update echo -e "[${gl_lv}OK${gl_bai}] 1/10. Update the system to the latest" @@ -13839,7 +13839,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 @@ -13873,7 +13873,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}" @@ -13990,7 +13990,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 "" @@ -14175,7 +14175,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 8ef709e37..3d1b03add 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -57,7 +57,7 @@ CheckFirstRun_true() { -# 関数の埋もれた情報を収集し、現在のスクリプトのバージョン番号、使用時間、システム バージョン、CPU アーキテクチャ、マシンの国、ユーザーが使用した関数名を記録する機能。機密情報は含まれませんので、ご安心ください。信じてください! +# この機能は、機能の埋め込み情報を収集し、現在のスクリプトのバージョン番号、使用時間、システム バージョン、CPU アーキテクチャ、マシンの国、およびユーザーが使用した機能名を記録します。機密情報は含まれませんので、ご安心ください。信じてください! # なぜこの機能が設計されたのでしょうか?その目的は、ユーザーが使いたい機能をより深く理解し、機能をさらに最適化し、ユーザーのニーズを満たす機能をさらに投入することです。 # send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご心配な場合はご利用をお断りすることも可能です。 @@ -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" ;; @@ -2111,7 +2111,7 @@ web_security() { ;; 22) - send_stats "高負荷により5秒シールドが可能" + send_stats "高負荷で5秒シールド可能" echo -e "${gl_huang}Web サイトは 5 分ごとに自動的に検出します。高負荷を検出すると自動的にシールドが開き、低負荷を検出すると5秒間自動的にシールドが閉じます。${gl_bai}" echo "--------------" echo "CFパラメータを取得します。" @@ -2439,7 +2439,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) @@ -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 @@ -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 @@ -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" ;; @@ -4342,7 +4342,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 "------------------------" @@ -4460,7 +4460,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}" } @@ -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" @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "ウェブサイト最適化モデル" + send_stats "ウェブサイト最適化モード" ;; 4) cd ~ @@ -5654,9 +5654,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") # ユーザーにバックアップ ディレクトリの入力を求めるプロンプトを表示する @@ -5698,7 +5698,7 @@ create_backup() { echo "- $path" done - # バックアップを作成する + # バックアップの作成 echo "バックアップの作成$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" @@ -5986,9 +5986,9 @@ list_partitions() { lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" } -# パーティションをマウントする +# パーティションのマウント mount_partition() { - send_stats "パーティションをマウントする" + send_stats "パーティションのマウント" read -e -p "マウントするパーティションの名前を入力してください (例: sda1):" PARTITION # パーティションが存在するかどうかを確認する @@ -6007,7 +6007,7 @@ mount_partition() { MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションをマウントする + # パーティションのマウント mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "ハードディスク管理機能" while true; do clear - echo "ハードドライブのパーティション管理" + echo "ハードディスクのパーティション管理" echo -e "${gl_huang}この機能は内部テスト中であるため、運用環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions @@ -6138,7 +6138,7 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "Enter を押して続行します..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -6425,7 +6425,7 @@ rsync_manager() { 0) break ;; *) echo "選択が無効です。もう一度お試しください。" ;; esac - read -e -p "Enter を押して続行します..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -7186,7 +7186,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 ファイルを編集する" @@ -7329,7 +7329,7 @@ linux_docker() { echo "" echo "ボリューム操作" echo "------------------------" - echo "1. 新しいボリュームを作成します" + echo "1. 新しいボリュームを作成する" echo "2. 指定したボリュームを削除します" echo "3. すべてのボリュームを削除します" echo "------------------------" @@ -8035,7 +8035,7 @@ linux_ldnmp() { 7) clear - # フララムフォーラム + # flarum论坛 webname="flarum论坛" send_stats "インストール$webname" echo "導入を開始する$webname" @@ -8815,7 +8815,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}------------------------" @@ -11956,7 +11956,7 @@ while true; do # ディレクトリが存在しない場合は作成する mkdir -p "$(dirname "$CONFIG_FILE")" - echo "クライアント設定を貼り付け、Enter キーを 2 回押して保存してください。" + echo "クライアント構成を貼り付け、Enter キーを 2 回押して保存してください。" # 変数を初期化する input="" @@ -12198,7 +12198,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" @@ -12378,7 +12378,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}------------------------" @@ -12636,8 +12636,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "最初にIPv6に切り替えました" - send_stats "最初にIPv6に切り替えました" + echo "IPv6優先に切り替えました" + send_stats "IPv6優先に切り替えました" ;; 3) @@ -13175,7 +13175,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 @@ -13433,7 +13433,7 @@ EOF case "$choice" in [Yy]) clear - send_stats "ワンストップチューニングスタート" + send_stats "ワンストップチューニングが始まります" echo "------------------------------------------------" linux_update echo -e "[${gl_lv}OK${gl_bai}】1/10。システムを最新のものにアップデートする" @@ -13839,7 +13839,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 @@ -13873,7 +13873,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}" @@ -13906,7 +13906,7 @@ while true; do 4) clear - send_stats "バックアップクラスター" + send_stats "バックアップクラスタ" echo -e "変更してください${gl_huang}/root/cluster/servers.py${gl_bai}ファイルをダウンロードしてバックアップを完了してください。" break_end ;; @@ -14175,7 +14175,7 @@ done k_info() { -send_stats "k コマンドリファレンスの使用例" +send_stats "k コマンドのリファレンス例" echo "-------------------" echo "ビデオ紹介: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "以下は、k コマンドの参考使用例です。" @@ -14185,7 +14185,7 @@ echo "パッケージをアンインストールします。 k 削除 nano wget echo "システム k アップデートを更新 | kアップデート" echo "クリーン系ジャンククリーン |きれいだ" echo "システムパネルを再度取り付けます。 k再インストール" -echo "BBR3 コントロール パネル K BBR3 | k bbrv3" +echo "bbr3 control panel k bbr3 | k bbrv3" echo "カーネル チューニング パネルk カーネルの最適化" echo "仮想メモリ k スワップを設定 2048" echo "仮想タイムゾーンを設定します k 時間 アジア/上海 | k タイムゾーン アジア/上海" @@ -14213,7 +14213,7 @@ echo "WordPress をインストールします。 kワードプレス | k wp xxx 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 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" @@ -14403,7 +14403,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 946c7dced..135b7f7f3 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -57,9 +57,9 @@ CheckFirstRun_true() { -# 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기기 국가 및 기능 이름을 기록하는 기능입니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! +# 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. -# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. +# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 불편하신 점이 있으시면 이용을 거부하실 수 있습니다. @@ -2759,7 +2759,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 @@ -3620,7 +3620,7 @@ EOF donlond_frp frps - # 생성된 정보를 출력 + # 생성된 정보 출력 ip_address echo "------------------------" echo "클라이언트 배포에 필요한 매개변수" @@ -3682,7 +3682,7 @@ remote_port = ${remote_port} EOF - # 생성된 정보를 출력 + # 생성된 정보 출력 echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." docker restart frpc @@ -3875,7 +3875,7 @@ frps_panel() { echo "------------------------" echo "7. IP+포트 접근 허용 8. IP+포트 접근 차단" echo "------------------------" - echo "00. 서비스 상태 새로고침 0. 이전 메뉴로 돌아가기" + echo "00. 刷新服务状态 0. 返回上一级选单" echo "------------------------" read -e -p "선택 항목을 입력하세요." choice case $choice in @@ -4460,7 +4460,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}" } @@ -5092,7 +5092,7 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "스캔할 디렉터리를 지정하십시오." + echo "스캔할 디렉터리를 지정하세요." return fi @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "웹사이트 최적화 모델" + send_stats "웹사이트 최적화 모드" ;; 4) cd ~ @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "하드디스크 관리 기능" while true; do clear - echo "하드 드라이브 파티션 관리" + echo "하드 디스크 파티션 관리" echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions @@ -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 @@ -7345,7 +7345,7 @@ linux_docker() { ;; 2) - read -e -p "삭제 볼륨 이름을 입력하세요(여러 볼륨 이름을 공백으로 구분하세요):" dockerjuans + read -e -p "삭제 볼륨 이름을 입력하십시오(여러 볼륨 이름을 공백으로 구분하십시오):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -8336,7 +8336,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 install_ssltls certs_status @@ -8815,7 +8815,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}------------------------" @@ -9064,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "나타 빌드" + send_stats "네자 빌드" local app_id="7" local docker_name="nezha-dashboard" @@ -9185,7 +9185,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 "------------------------" @@ -12198,7 +12198,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" @@ -12377,7 +12377,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 전환" @@ -12636,8 +12636,8 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "먼저 IPv6로 전환됨" - send_stats "먼저 IPv6로 전환됨" + echo "IPv6 우선순위로 전환됨" + send_stats "IPv6 우선순위로 전환됨" ;; 3) @@ -12870,7 +12870,7 @@ EOF echo "유럽" echo "11. 영국 런던 시간 12. 프랑스 파리 시간" echo "13. 독일 베를린 시간 14. 러시아 모스크바 시간" - echo "15. 네덜란드 유트라흐트 시간 16. 스페인 마드리드 시간" + echo "15. 네덜란드 위트라흐트 시간 16. 스페인 마드리드 시간" echo "------------------------" echo "미국" echo "21. 미국 서부 시간 22. 미국 동부 시간" @@ -13175,7 +13175,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 @@ -13421,7 +13421,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}" @@ -13433,7 +13433,7 @@ EOF case "$choice" in [Yy]) clear - send_stats "원스톱 튜닝이 시작되었습니다" + send_stats "원스톱 튜닝 시작" echo "------------------------------------------------" linux_update echo -e "[${gl_lv}OK${gl_bai}] 1/10. 시스템을 최신으로 업데이트하세요" @@ -13839,7 +13839,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 @@ -13873,7 +13873,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}" @@ -13914,7 +13914,7 @@ while true; do 5) clear send_stats "클러스터 복원" - echo "귀하의 server.py를 업로드하고 업로드를 시작하려면 아무 키나 누르십시오!" + echo "server.py를 업로드하고 아무 키나 눌러 업로드를 시작하세요!" echo -e "업로드해주세요${gl_huang}servers.py${gl_bai}파일을 제출하다${gl_huang}/root/cluster/${gl_bai}복원 완료!" break_end ;; @@ -14175,7 +14175,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 8a9ded8a2..89269b787 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -545,7 +545,7 @@ while true; do docker rm -f $dockername ;; 5) - send_stats "重啟指定容器" + send_stats "重启指定容器" read -e -p "請輸入容器名稱(多個容器名稱請以空格分隔):" dockername docker restart $dockername ;; @@ -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,7 +812,7 @@ docker_ipv6_off() { local CONFIG_FILE="/etc/docker/daemon.json" - # 檢查設定檔是否存在 + # 检查配置文件是否存在 if [ ! -f "$CONFIG_FILE" ]; then echo -e "${gl_hong}設定檔不存在${gl_bai}" return @@ -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 @@ -1250,7 +1250,7 @@ iptables_panel() { add_swap() { local new_swap=$1 # 获取传入的参数 - # 取得目前系統中所有的 swap 分區 + # 取得目前系統中所有的 swap 分割區 local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') # 遍歷並刪除所有的 swap 分割區 @@ -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 @@ -4107,7 +4107,7 @@ yt_menu_pro() { 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 "現在開始批量下載..." @@ -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* @@ -4969,7 +4969,7 @@ 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}') @@ -5814,7 +5814,7 @@ add_connection() { echo "- 連線名稱: my_server" echo "- IP位址: 192.168.1.100" echo "- 使用者名稱: root" - echo "- 連接埠: 22" + echo " - 端口: 22" echo "------------------------" read -e -p "請輸入連線名稱:" name read -e -p "請輸入IP位址:" ip @@ -5980,7 +5980,7 @@ ssh_manager() { -# 列出可用的硬碟分割區 +# 列出可用的硬盘分区 list_partitions() { echo "可用的硬碟分割區:" lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" @@ -6752,7 +6752,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 ;; @@ -6926,7 +6926,7 @@ docker_ssh_migration() { PACKED_COMPOSE_PATHS["$project_dir"]=1 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 # 普通容器備份卷 @@ -7019,7 +7019,7 @@ docker_ssh_migration() { fi done - # --------- 繼續還原一般容器 --------- + # --------- 继续还原普通容器 --------- echo -e "${BLUE}檢查並還原普通 Docker 容器...${NC}" local has_container=false for json in "$BACKUP_DIR"/*_inspect.json; do @@ -7100,7 +7100,7 @@ docker_ssh_migration() { migrate_docker() { send_stats "Docker遷移" 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 @@ -7194,7 +7194,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}返回主選單" @@ -7842,7 +7842,7 @@ linux_ldnmp() { 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}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}站點反向代理-域名" @@ -8861,7 +8861,7 @@ while true; do 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}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自架直播平台" @@ -10276,7 +10276,7 @@ while true; do ip_address echo "已經安裝完成" check_docker_app_ip - echo "初始使用者名稱密碼皆為: admin" + echo "初始使用者名稱密碼均為: admin" } docker_app_update() { @@ -12556,7 +12556,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之間的數字。" @@ -12973,7 +12973,7 @@ EOF echo "選擇更新來源區域" echo "接入LinuxMirrors切換系統更新來源" echo "------------------------" - echo "1. 中國大陸【預設】 2. 中國大陸【教育網】 3. 海外地區" + echo "1. 中国大陆【默认】 2. 中国大陆【教育网】 3. 海外地区" echo "------------------------" echo "0. 返回上一級選單" echo "------------------------" @@ -13756,7 +13756,7 @@ linux_file() { read -e -p "請輸入遠端伺服器IP:" remote_ip if [ -z "$remote_ip" ]; then echo "錯誤: 請輸入遠端伺服器IP。" - send_stats "传送文件失败: 未输入远端服务器IP" + send_stats "傳送檔案失敗: 未輸入遠端伺服器IP" continue fi @@ -13828,7 +13828,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" # 遍歷伺服器並執行命令 @@ -13872,7 +13872,7 @@ while true; do echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}批次執行任務${gl_bai}" echo -e "${gl_kjlan}11. ${gl_bai}安裝科技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}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}" echo -e "${gl_kjlan}0. ${gl_bai}返回主選單" @@ -13895,7 +13895,7 @@ while true; do ;; 2) send_stats "刪除叢集伺服器" - read -e -p "请输入需要删除的关键字: " rmserver + read -e -p "請輸入需要刪除的關鍵字:" rmserver sed -i "/$rmserver/d" ~/cluster/servers.py ;; 3) @@ -13907,7 +13907,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 ;; @@ -14030,11 +14030,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}你已经是最新版本!${gl_huang}v$sh_v${gl_bai}" + echo -e "${gl_lv}你已經是最新版本!${gl_huang}v$sh_v${gl_bai}" send_stats "腳本已經最新了,無需更新" else echo "發現新版本!" - echo -e "当前版本 v$sh_v最新版本${gl_huang}v$sh_v_new${gl_bai}" + echo -e "目前版本 v$sh_v最新版本${gl_huang}v$sh_v_new${gl_bai}" fi @@ -14208,7 +14208,7 @@ 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 "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 負載平衡" @@ -14403,7 +14403,7 @@ else shift case $1 in install|安装) - send_stats "快捷安装docker" + send_stats "快速安裝docker" install_docker ;; ps|容器) From db44ecdadaaacf4801d23553d8aa20df1da61a6d Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 5 Apr 2026 05:22:39 +0000 Subject: [PATCH 27/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202026-04-05=2005:22:39?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 82 +++++++++++++++++++++++++------------------------- jp/kejilion.sh | 62 +++++++++++++++++++------------------- kr/kejilion.sh | 76 +++++++++++++++++++++++----------------------- tw/kejilion.sh | 42 +++++++++++++------------- 4 files changed, 131 insertions(+), 131 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 23f22ff28..76bd83df7 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -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. @@ -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 "App uninstalled" + echo "App has been uninstalled" send_stats "uninstall$docker_name" ;; @@ -3906,7 +3906,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" @@ -4003,7 +4003,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) @@ -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 setup is complete!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is completed!${gl_bai}" } @@ -5312,7 +5312,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 @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "Website optimization mode" + send_stats "Website optimization model" ;; 4) cd ~ @@ -5654,9 +5654,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 @@ -5698,7 +5698,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[@]}" @@ -6119,7 +6119,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 @@ -6326,7 +6326,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 @@ -6537,7 +6537,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}" @@ -7112,7 +7112,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 @@ -7479,7 +7479,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}------------------------" @@ -7651,7 +7651,7 @@ linux_Oracle() { 1) clear echo "Active script: CPU usage 10-20% Memory usage 20%" - read -e -p "确定安装吗? (Y/N):" choice + read -e -p "Are you sure you want to install it? (Y/N):" choice case "$choice" in [Yy]) @@ -7664,7 +7664,7 @@ linux_Oracle() { local DEFAULT_SPEEDTEST_INTERVAL=120 # 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 "请输入CPU核心数 [默认: $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 (e.g. 10-20) [Default:$DEFAULT_CPU_UTIL]: " cpu_util @@ -8815,7 +8815,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}------------------------" @@ -9257,7 +9257,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" ;; *) @@ -9311,7 +9311,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 @@ -9409,7 +9409,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 @@ -10294,7 +10294,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 @@ -10516,7 +10516,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 @@ -10567,7 +10567,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 @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "App uninstalled" + echo "App has been uninstalled" } docker_app_plus @@ -10671,7 +10671,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 @@ -10999,7 +10999,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11405,7 +11405,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 @@ -11632,7 +11632,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 @@ -11770,7 +11770,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 @@ -11824,7 +11824,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 @@ -12057,7 +12057,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 @@ -12140,7 +12140,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 "" @@ -12198,7 +12198,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" @@ -12444,7 +12444,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 "------------" @@ -12636,7 +12636,7 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "Switched to IPv6 first" + echo "Switched to IPv6 priority" send_stats "Switched to IPv6 priority" ;; @@ -12875,7 +12875,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 "------------------------" @@ -13873,7 +13873,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}" @@ -13990,7 +13990,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 3d1b03add..d53c3cb0c 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -57,7 +57,7 @@ CheckFirstRun_true() { -# この機能は、機能の埋め込み情報を収集し、現在のスクリプトのバージョン番号、使用時間、システム バージョン、CPU アーキテクチャ、マシンの国、およびユーザーが使用した機能名を記録します。機密情報は含まれませんので、ご安心ください。信じてください! +# 関数の埋もれた情報を収集し、現在のスクリプトのバージョン番号、使用時間、システム バージョン、CPU アーキテクチャ、マシンの国、ユーザーが使用した関数名を記録する機能。機密情報は含まれませんので、ご安心ください。信じてください! # なぜこの機能が設計されたのでしょうか?その目的は、ユーザーが使いたい機能をより深く理解し、機能をさらに最適化し、ユーザーのニーズを満たす機能をさらに投入することです。 # send_stats 関数の呼び出し位置を全文検索できます。これは透明性があり、オープンソースです。ご心配な場合はご利用をお断りすることも可能です。 @@ -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 "ポートがオープンしました" } @@ -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" ;; @@ -2111,7 +2111,7 @@ web_security() { ;; 22) - send_stats "高負荷で5秒シールド可能" + send_stats "高負荷により5秒シールドが可能" echo -e "${gl_huang}Web サイトは 5 分ごとに自動的に検出します。高負荷を検出すると自動的にシールドが開き、低負荷を検出すると5秒間自動的にシールドが閉じます。${gl_bai}" echo "--------------" echo "CFパラメータを取得します。" @@ -2439,7 +2439,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) @@ -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 @@ -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" ;; @@ -4342,7 +4342,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 "------------------------" @@ -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ログインの設定は完了です!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定が完了しました!${gl_bai}" } @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "ウェブサイト最適化モード" + send_stats "ウェブサイト最適化モデル" ;; 4) cd ~ @@ -5654,9 +5654,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") # ユーザーにバックアップ ディレクトリの入力を求めるプロンプトを表示する @@ -5698,7 +5698,7 @@ create_backup() { echo "- $path" done - # バックアップの作成 + # バックアップを作成する echo "バックアップの作成$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" @@ -6326,7 +6326,7 @@ run_task() { else echo "同期に失敗しました!以下の点をご確認ください。" echo "1. ネットワーク接続は正常ですか?" - echo "2. リモートホストにアクセスできるかどうか" + echo "2. リモート ホストにアクセスできますか?" echo "3. 認証情報は正しいですか?" echo "4. ローカル ディレクトリとリモート ディレクトリには正しいアクセス許可がありますか?" fi @@ -6335,7 +6335,7 @@ run_task() { # スケジュールされたタスクを作成する schedule_task() { - send_stats "同期スケジュールされたタスクを追加する" + send_stats "同期のスケジュールされたタスクを追加する" read -e -p "定期的に同期するタスク番号を入力してください:" num if ! [[ "$num" =~ ^[0-9]+$ ]]; then @@ -7112,7 +7112,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 @@ -8035,7 +8035,7 @@ linux_ldnmp() { 7) clear - # flarum论坛 + # フララムフォーラム webname="flarum论坛" send_stats "インストール$webname" echo "導入を開始する$webname" @@ -8815,7 +8815,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}------------------------" @@ -9073,7 +9073,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 @@ -9082,7 +9082,7 @@ while true; do fi echo "" echo "------------------------" - echo "1. 使用方法" + echo "1. 使用する" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -11956,7 +11956,7 @@ while true; do # ディレクトリが存在しない場合は作成する mkdir -p "$(dirname "$CONFIG_FILE")" - echo "クライアント構成を貼り付け、Enter キーを 2 回押して保存してください。" + echo "クライアント設定を貼り付け、Enter キーを 2 回押して保存してください。" # 変数を初期化する input="" @@ -12140,7 +12140,7 @@ while true; do r) root_use send_stats "すべてのアプリを復元する" - echo "利用可能なアプリケーションのバックアップ" + echo "利用可能なアプリのバックアップ" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -12198,7 +12198,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" @@ -13868,12 +13868,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}" @@ -13906,14 +13906,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 @@ -14185,7 +14185,7 @@ echo "パッケージをアンインストールします。 k 削除 nano wget echo "システム k アップデートを更新 | kアップデート" echo "クリーン系ジャンククリーン |きれいだ" echo "システムパネルを再度取り付けます。 k再インストール" -echo "bbr3 control panel k bbr3 | k bbrv3" +echo "BBR3 コントロール パネル K BBR3 | k bbrv3" echo "カーネル チューニング パネルk カーネルの最適化" echo "仮想メモリ k スワップを設定 2048" echo "仮想タイムゾーンを設定します k 時間 アジア/上海 | k タイムゾーン アジア/上海" @@ -14213,7 +14213,7 @@ echo "WordPress をインストールします。 kワードプレス | k wp xxx 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 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" @@ -14403,7 +14403,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 135b7f7f3..ea864da14 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -57,9 +57,9 @@ CheckFirstRun_true() { -# 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! +# 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록하는 기능입니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. -# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 불편하신 점이 있으시면 이용을 거부하실 수 있습니다. +# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. @@ -1122,7 +1122,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 "------------------------" @@ -1998,7 +1998,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 방어 끄기" @@ -2112,7 +2112,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 +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) - # 획득한 시간을 확인하세요. + # 획득한 시간을 확인 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) @@ -3185,16 +3185,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" } @@ -3620,7 +3620,7 @@ EOF donlond_frp frps - # 생성된 정보 출력 + # 생성된 정보를 출력 ip_address echo "------------------------" echo "클라이언트 배포에 필요한 매개변수" @@ -3682,7 +3682,7 @@ remote_port = ${remote_port} EOF - # 생성된 정보 출력 + # 생성된 정보를 출력 echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." docker restart frpc @@ -3875,7 +3875,7 @@ frps_panel() { echo "------------------------" echo "7. IP+포트 접근 허용 8. IP+포트 접근 차단" echo "------------------------" - echo "00. 刷新服务状态 0. 返回上一级选单" + echo "00. 서비스 상태 새로고침 0. 이전 메뉴로 돌아가기" echo "------------------------" read -e -p "선택 항목을 입력하세요." choice case $choice in @@ -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 ;; @@ -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 @@ -5038,7 +5038,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 @@ -5056,7 +5056,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 @@ -5092,7 +5092,7 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "스캔할 디렉터리를 지정하세요." + echo "스캔할 디렉터리를 지정하십시오." return fi @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "웹사이트 최적화 모드" + send_stats "웹사이트 최적화 모델" ;; 4) cd ~ @@ -5598,7 +5598,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 "------------------------" @@ -6326,7 +6326,7 @@ run_task() { else echo "동기화에 실패했습니다! 다음 사항을 확인하세요." echo "1. 네트워크 연결이 정상인가요?" - echo "2. 원격 호스트에 접근 가능한지 여부" + echo "2. 원격 호스트에 접근할 수 있나요?" echo "3. 인증정보가 정확합니까?" echo "4. 로컬 및 원격 디렉터리에 올바른 액세스 권한이 있습니까?" fi @@ -6871,7 +6871,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 @@ -7010,7 +7010,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 @@ -7112,7 +7112,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 @@ -7145,7 +7145,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 "------------------------" @@ -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 @@ -7345,7 +7345,7 @@ linux_docker() { ;; 2) - read -e -p "삭제 볼륨 이름을 입력하십시오(여러 볼륨 이름을 공백으로 구분하십시오):" dockerjuans + read -e -p "삭제 볼륨 이름을 입력하세요(여러 볼륨 이름을 공백으로 구분하세요):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -7651,7 +7651,7 @@ linux_Oracle() { 1) clear echo "활성 스크립트: CPU 사용량 10-20% 메모리 사용량 20%" - read -e -p "설치하시겠습니까? (예/아니요):" choice + read -e -p "정말로 설치하시겠습니까? (예/아니요):" choice case "$choice" in [Yy]) @@ -8815,7 +8815,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}------------------------" @@ -8827,7 +8827,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}------------------------" @@ -9185,7 +9185,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 "------------------------" @@ -12140,7 +12140,7 @@ while true; do r) root_use send_stats "모든 앱 복원" - echo "사용 가능한 애플리케이션 백업" + echo "사용 가능한 앱 백업" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -12198,7 +12198,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" @@ -12300,7 +12300,7 @@ linux_work() { echo -e "SSH 상주 모드${tmux_sshd_status}" echo "SSH 연결을 연 후 바로 상주 모드로 들어가고 이전 작업 상태로 바로 돌아갑니다." echo "------------------------" - echo "1. 켜기 2. 끄기" + echo "1. 켜짐 2. 꺼짐" echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -12377,7 +12377,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 전환" @@ -12870,7 +12870,7 @@ EOF echo "유럽" echo "11. 영국 런던 시간 12. 프랑스 파리 시간" echo "13. 독일 베를린 시간 14. 러시아 모스크바 시간" - echo "15. 네덜란드 위트라흐트 시간 16. 스페인 마드리드 시간" + echo "15. 네덜란드 유트라흐트 시간 16. 스페인 마드리드 시간" echo "------------------------" echo "미국" echo "21. 미국 서부 시간 22. 미국 동부 시간" @@ -12938,7 +12938,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 @@ -13873,7 +13873,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 89269b787..3451ec1e0 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -545,7 +545,7 @@ while true; do docker rm -f $dockername ;; 5) - send_stats "重启指定容器" + send_stats "重啟指定容器" read -e -p "請輸入容器名稱(多個容器名稱請以空格分隔):" dockername docker restart $dockername ;; @@ -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,7 +812,7 @@ docker_ipv6_off() { local CONFIG_FILE="/etc/docker/daemon.json" - # 检查配置文件是否存在 + # 檢查設定檔是否存在 if [ ! -f "$CONFIG_FILE" ]; then echo -e "${gl_hong}設定檔不存在${gl_bai}" return @@ -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 @@ -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 @@ -3398,7 +3398,7 @@ ldnmp_web_status() { send_stats "更換站點域名" echo -e "${gl_hong}強烈建議:${gl_bai}先備份好全站資料再更換站點網域!" read -e -p "請輸入舊網域名稱:" oddyuming - read -e -p "請輸入新網域:" yuming + read -e -p "請輸入新網域名稱:" yuming install_certbot install_ssltls certs_status @@ -3445,7 +3445,7 @@ ldnmp_web_status() { send_stats "建立關聯站點" echo -e "為現有的站點再關聯一個新網域用於訪問" read -e -p "請輸入現有的網域名稱:" oddyuming - read -e -p "請輸入新網域:" yuming + read -e -p "請輸入新網域名稱:" yuming install_certbot install_ssltls certs_status @@ -4107,7 +4107,7 @@ yt_menu_pro() { 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 "現在開始批量下載..." @@ -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* @@ -4969,7 +4969,7 @@ 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}') @@ -5814,7 +5814,7 @@ add_connection() { echo "- 連線名稱: my_server" echo "- IP位址: 192.168.1.100" echo "- 使用者名稱: root" - echo " - 端口: 22" + echo "- 連接埠: 22" echo "------------------------" read -e -p "請輸入連線名稱:" name read -e -p "請輸入IP位址:" ip @@ -5980,7 +5980,7 @@ ssh_manager() { -# 列出可用的硬盘分区 +# 列出可用的硬碟分割區 list_partitions() { echo "可用的硬碟分割區:" lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT | grep -v "sr\|loop" @@ -6752,7 +6752,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 ;; @@ -6926,7 +6926,7 @@ docker_ssh_migration() { PACKED_COMPOSE_PATHS["$project_dir"]=1 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 # 普通容器備份卷 @@ -7019,7 +7019,7 @@ docker_ssh_migration() { fi done - # --------- 继续还原普通容器 --------- + # --------- 繼續還原一般容器 --------- echo -e "${BLUE}檢查並還原普通 Docker 容器...${NC}" local has_container=false for json in "$BACKUP_DIR"/*_inspect.json; do @@ -7100,7 +7100,7 @@ docker_ssh_migration() { migrate_docker() { send_stats "Docker遷移" 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 @@ -7194,7 +7194,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}返回主選單" @@ -7842,7 +7842,7 @@ linux_ldnmp() { 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}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}站點反向代理-域名" @@ -8861,7 +8861,7 @@ while true; do 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}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自架直播平台" @@ -12973,7 +12973,7 @@ EOF echo "選擇更新來源區域" echo "接入LinuxMirrors切換系統更新來源" echo "------------------------" - echo "1. 中国大陆【默认】 2. 中国大陆【教育网】 3. 海外地区" + echo "1. 中國大陸【預設】 2. 中國大陸【教育網】 3. 海外地區" echo "------------------------" echo "0. 返回上一級選單" echo "------------------------" @@ -13828,7 +13828,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" # 遍歷伺服器並執行命令 From 289e276fc8cab39d62033c8072d8922da5c7ddde Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 12 Apr 2026 05:24:05 +0000 Subject: [PATCH 28/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202026-04-12=2005:24:05?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 42 +- jp/kejilion.sh | 4718 ++++++++++++++++++++++++------------------------ kr/kejilion.sh | 2496 ++++++++++++------------- tw/kejilion.sh | 4 +- 4 files changed, 3630 insertions(+), 3630 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 76bd83df7..628edb8e3 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. @@ -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 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 @@ -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 setup is completed!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is complete!${gl_bai}" } @@ -5312,7 +5312,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 @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "Website optimization model" + send_stats "Website optimization mode" ;; 4) cd ~ @@ -5654,9 +5654,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 @@ -5698,7 +5698,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[@]}" @@ -6119,7 +6119,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 @@ -6537,7 +6537,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}" @@ -6951,7 +6951,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") @@ -7112,7 +7112,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 @@ -7479,7 +7479,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}------------------------" @@ -8815,7 +8815,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}------------------------" @@ -12140,7 +12140,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 "" @@ -12444,7 +12444,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 "------------" @@ -12636,8 +12636,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) @@ -12875,7 +12875,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 "------------------------" @@ -13839,7 +13839,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 @@ -13873,7 +13873,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}" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index d53c3cb0c..d95435dd8 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}テクノロジー ライオン スクリプト ツールボックスへようこそ${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 @@ -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 "最低限必要なスペース:${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 @@ -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 @@ -261,14 +261,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" @@ -281,43 +281,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 } @@ -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}正在安装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 @@ -502,63 +502,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]) @@ -567,28 +567,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 "------------------------------------------------------------" @@ -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) @@ -622,8 +622,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) @@ -642,44 +642,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]) @@ -688,7 +688,7 @@ while true; do [Nn]) ;; *) - echo "選択が無効です。Y または N を入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -756,16 +756,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}" } @@ -777,27 +777,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 @@ -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ステータスを確認する + # 检查当前的 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,117 +872,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" } @@ -992,7 +992,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 @@ -1002,12 +1002,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 @@ -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_code 的 IP 区域文件失败" continue fi @@ -1052,7 +1052,7 @@ manage_country_rules() { iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP - echo "正常にブロックされました$country_codeIPアドレス" + echo "已成功阻止 $country_code 的 IP 地址" rm "${country_code,,}.zone" ;; @@ -1062,7 +1062,7 @@ manage_country_rules() { fi if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "エラー: ダウンロード$country_codeIPゾーンファイルが失敗しました" + echo "错误:下载 $country_code 的 IP 区域文件失败" 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_code 的 IP 地址" rm "${country_code,,}.zone" ;; @@ -1086,11 +1086,11 @@ manage_country_rules() { ipset destroy "$ipset_name" fi - echo "正常に削除されました$country_codeIPアドレス制限" + echo "已成功解除 $country_code 的 IP 地址限制" ;; *) - echo "使用法: manage_country_rules {block|allow|unblock} " + echo "用法: manage_country_rules {block|allow|unblock} " ;; esac done @@ -1111,42 +1111,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. 指定国における知的財産制限を解除する" + 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 @@ -1159,10 +1159,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 @@ -1175,40 +1175,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 @@ -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_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" ;; *) @@ -1250,23 +1250,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 @@ -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 @@ -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}" @@ -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 @@ -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 @@ -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,15 +1446,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 "" } @@ -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" @@ -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 "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 @@ -1542,7 +1542,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 @@ -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,8 +1616,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}完成" } @@ -1636,11 +1636,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" } @@ -1650,29 +1650,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_FILECF 情報は後で変更できます。" - 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 "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" \ @@ -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 @@ -1696,28 +1696,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 @@ -1733,23 +1733,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 @@ -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,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」を含む行の前に新しい定義を挿入します。 + # 插入新定义,放在含 "Happy publishing" 的行前 awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /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,11 +1881,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 @@ -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,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 @@ -1983,31 +1983,31 @@ nginx_gzip() { web_security() { - send_stats "LDNMP環境防御" + send_stats "LDNMP环境防御" while true; do check_f2b_status check_waf_status check_cf_mode clear - echo -e "サーバー Web サイト防御プログラム${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 "1. 安装防御程序" echo "------------------------" - echo "5. SSH 傍受記録の表示 6. Web サイト傍受記録の表示" - echo "7. 防御ルールのリストを表示します。 8. リアルタイム監視のログを表示します。" + echo "5. 查看SSH拦截记录 6. 查看网站拦截记录" + echo "7. 查看防御规则列表 8. 查看日志实时监控" echo "------------------------" - echo "11. インターセプトパラメータを設定します。 12. ブロックされたすべての IP をクリアします。" + echo "11. 配置拦截参数 12. 清除所有拉黑的IP" echo "------------------------" - echo "21. クラウドフレア モード 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 @@ -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 "クラウドフレアモード" - 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 @@ -2107,21 +2107,21 @@ 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后台,站点-安全性-事件中查看拦截记录" ;; 22) - send_stats "高負荷により5秒シールドが可能" - echo -e "${gl_huang}Web サイトは 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 @@ -2138,23 +2138,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) @@ -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 @@ -2198,21 +2198,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 @@ -2228,33 +2228,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 @@ -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 @@ -2278,23 +2278,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 @@ -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 @@ -2316,7 +2316,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP 環境が高パフォーマンス モードに設定されている" + echo "LDNMP环境已设置成 高性能模式" ;; 3) @@ -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 # } @@ -2386,7 +2386,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "訪問先住所:" +echo "访问地址:" ip_address @@ -2424,31 +2424,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 @@ -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,34 +2477,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 @@ -2514,7 +2514,7 @@ block_container_port() { fi - echo "IP+ポートはサービスへのアクセスをブロックされています" + echo "已阻止IP+端口访问该服务" save_iptables_rules } @@ -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 @@ -2554,17 +2554,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 +2575,7 @@ clear_container_rules() { fi - echo "IP+ポートによるサービスへのアクセスが許可されました" + echo "已允许IP+端口访问该服务" save_iptables_rules } @@ -2589,25 +2589,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 +2616,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 +2648,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,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. 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) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${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 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 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,19 +2860,19 @@ 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) setup_docker_dir check_disk_space $app_size /home/docker - read -e -p "アプリケーションの外部サービス ポートを入力し、Enter キーを押してデフォルトで使用します。${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" @@ -3063,11 +3063,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 +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 @@ -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,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 @@ -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,16 +3185,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 +3206,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 @@ -3247,17 +3247,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 @@ -3280,14 +3280,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 @@ -3340,12 +3340,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//') @@ -3358,35 +3358,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 @@ -3395,15 +3395,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') @@ -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" {} + @@ -3442,10 +3442,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 @@ -3459,25 +3459,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 @@ -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 "公式サイト紹介:$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 @@ -3541,20 +3541,20 @@ while true; do panel_app_install add_app_id - send_stats "${panelname}インストール" + send_stats "${panelname}安装" ;; 2) panel_app_manage 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 @@ -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,17 +3620,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 @@ -3640,9 +3640,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 @@ -3662,17 +3662,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 を入力してください [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} @@ -3682,8 +3682,8 @@ remote_port = ${remote_port} EOF - # 生成された情報を出力する - echo "仕える$service_namefrpc.toml に正常に追加されました" + # 输出生成的信息 + echo "服务 $service_name 已成功添加到 frpc.toml" docker restart frpc @@ -3694,12 +3694,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 @@ -3709,7 +3709,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # ヘッダーを印刷します + # 打印表头 printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -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, \ @@ -3739,11 +3739,11 @@ list_forwarding_services() { type } - # 現在のサービス名を更新します + # 更新当前服务名称 if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 前回の値をクリア + # 清除之前的值 local_ip="" local_port="" remote_port="" @@ -3772,7 +3772,7 @@ list_forwarding_services() { } END { - # 最後のサービスに関する情報を出力します + # 打印最后一个服务的信息 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 @@ -3804,18 +3804,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 @@ -3824,7 +3824,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}" @@ -3851,7 +3851,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRPサーバー" + send_stats "FRP服务端" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3859,25 +3859,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 @@ -3885,7 +3885,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 +3895,7 @@ frps_panel() { donlond_frp frps add_app_id - echo "FRPサーバーを更新しました" + echo "FRP服务端已经更新完成" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3906,37 +3906,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服务状态" ;; *) @@ -3949,7 +3949,7 @@ frps_panel() { frpc_panel() { - send_stats "FRPクライアント" + send_stats "FRP客户端" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3957,10 +3957,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 @@ -3968,13 +3968,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 @@ -3982,7 +3982,7 @@ frpc_panel() { configure_frpc add_app_id - echo "FRPクライアントがインストールされています" + echo "FRP客户端已经安装完成" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -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,68 +4049,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. 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 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 をアンインストールしています..." - 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 \ @@ -4118,31 +4118,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" ;; *) @@ -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 @@ -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 @@ -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,13 +4243,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 @@ -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 "未使用の依存関係をクリーンアップします..." + 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 @@ -4327,26 +4327,26 @@ 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アドレス" + 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" @@ -4354,7 +4354,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,14 +4362,14 @@ 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 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 が 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/' \ @@ -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" @@ -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 @@ -4460,17 +4460,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 @@ -4488,7 +4488,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}" } @@ -4497,26 +4497,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 @@ -4527,41 +4527,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" @@ -4577,21 +4577,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 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 + read -e -p "请选择要重装的系统: " sys_choice case "$sys_choice" in 1) - send_stats "debian13を再インストールする" + send_stats "重装debian 13" dd_xitong_3 bash reinstall.sh debian 13 reboot @@ -4599,49 +4599,49 @@ dd_xitong() { ;; 2) - send_stats "debian12を再インストールする" + send_stats "重装debian 12" dd_xitong_1 bash InstallNET.sh -debian 12 reboot exit ;; 3) - send_stats "debian11を再インストールする" + send_stats "重装debian 11" dd_xitong_1 bash InstallNET.sh -debian 11 reboot exit ;; 4) - send_stats "debian10を再インストールする" + 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 @@ -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 @@ -4666,7 +4666,7 @@ dd_xitong() { ;; 23) - send_stats "alma10を再インストールする" + send_stats "重装alma10" dd_xitong_3 bash reinstall.sh almalinux 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 @@ -4714,7 +4714,7 @@ dd_xitong() { ;; 29) - send_stats "centos10を再インストールする" + send_stats "重装centos10" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4722,7 +4722,7 @@ dd_xitong() { ;; 30) - send_stats "centos9を再インストールする" + send_stats "重装centos9" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4730,7 +4730,7 @@ dd_xitong() { ;; 31) - send_stats "アルパインを再インストールする" + send_stats "重装alpine" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4738,7 +4738,7 @@ dd_xitong() { ;; 32) - send_stats "アーチを再インストールする" + send_stats "重装arch" dd_xitong_3 bash reinstall.sh arch reboot @@ -4746,7 +4746,7 @@ dd_xitong() { ;; 33) - send_stats "kaliを再インストールする" + send_stats "重装kali" dd_xitong_3 bash reinstall.sh kali reboot @@ -4754,7 +4754,7 @@ dd_xitong() { ;; 34) - send_stats "オープニューラーを再インストールする" + send_stats "重装openeuler" dd_xitong_3 bash reinstall.sh openeuler 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 "Feiniu を再インストールする" + send_stats "重装飞牛" dd_xitong_3 bash reinstall.sh fnos reboot @@ -4778,7 +4778,7 @@ dd_xitong() { ;; 41) - send_stats "Windows 11を再インストールする" + send_stats "重装windows11" 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 "重装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 @@ -4802,7 +4802,7 @@ dd_xitong() { ;; 44) - send_stats "Windowsサーバー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サーバー22を再インストールします" + send_stats "重装windows server 22" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" reboot @@ -4818,7 +4818,7 @@ dd_xitong() { ;; 46) - send_stats "Windowsサーバー19を再インストールします" + send_stats "重装windows server 19" dd_xitong_2 bash InstallNET.sh -windows 2019 -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 @@ -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 "------------------------" - 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) @@ -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 カーネルをアップグレードして BBR3 を有効にします。" + echo "仅支持Debian/Ubuntu" + echo "请备份数据,将为你升级Linux内核开启BBR3" echo "------------------------------------------------" - read -e -p "続行してもよろしいですか? (はい/いいえ):" choice + read -e -p "确定继续吗?(Y/N): " 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+') @@ -4949,17 +4949,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 +4968,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 } @@ -5009,37 +5009,37 @@ elrepo_install() { elrepo() { root_use - send_stats "Red Hat カーネル管理" + 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 "Red Hat カーネルをアンインストールする" + echo "elrepo内核已卸载。重启后生效" + send_stats "卸载红帽内核" server_reboot ;; @@ -5052,26 +5052,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 "続行してもよろしいですか? (はい/いいえ):" 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 +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 \ @@ -5092,19 +5092,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 +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 \ @@ -5122,8 +5122,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}" } @@ -5135,23 +5135,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 @@ -5160,7 +5160,7 @@ clamav() { ;; 2) - send_stats "重要なディレクトリのスキャン" + send_stats "重要目录扫描" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5168,8 +5168,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 +5186,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 +5212,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 +5253,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 +5294,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 } -# Webサイト構築最適化機能 +# 网站搭建优化函数 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 +5336,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 +5356,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 サイト最適化モード: 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 +5438,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 @@ -5447,17 +5447,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 } @@ -5467,29 +5467,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 +5511,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 +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}#" @@ -5535,9 +5535,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 +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 "有効にすると、重要なファイルを誤って削除することを防ぐために、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 +5615,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 +5623,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 ;; *) @@ -5650,23 +5650,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 "- Enter キーを押して、デフォルトのディレクトリ (/etc /usr /home) を使用します。" - read -r -p "バックアップするディレクトリを入力してください (複数のディレクトリをスペースで区切って、Enter キーを押してデフォルトのディレクトリを使用します)。" 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" # 配置文件和软件包配置 @@ -5674,119 +5674,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 } @@ -5798,56 +5798,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 "キーの内容を貼り付けてください (貼り付け後に Enter を 2 回押します)。" + echo "请粘贴密钥内容 (粘贴完成后按两次回车):" local password_or_key="" while IFS= read -r line; do - # 入力が空行で、キーの内容にすでに先頭が含まれている場合は、入力を終了します + # 如果输入为空行且密钥内容已经包含了开头,则结束输入 if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi - # それが最初の行である場合、またはすでにキーコンテンツの入力を開始している場合は、追加を続けます。 + # 如果是第一行或已经开始输入密钥内容,则继续添加 if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then local password_or_key+="${line}"$'\n' fi done - # キーコンテンツかどうかを確認する + # 检查是否是密钥内容 if [[ "$password_or_key" == *"-----BEGIN"* && "$password_or_key" == *"PRIVATE KEY-----"* ]]; then local key_file="$KEY_DIR/$name.key" echo -n "$password_or_key" > "$key_file" @@ -5856,89 +5856,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 @@ -5950,21 +5950,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 } @@ -5980,156 +5980,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 ;; @@ -6138,64 +6138,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 "- リモートディレクトリ: /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 "キーの内容を貼り付けてください (貼り付け後に Enter を 2 回押します)。" + echo "请粘贴密钥内容 (粘贴完成后按两次回车):" local password_or_key="" while IFS= read -r line; do - # 入力が空行で、キーの内容にすでに先頭が含まれている場合は、入力を終了します + # 如果输入为空行且密钥内容已经包含了开头,则结束输入 if [[ -z "$line" && "$password_or_key" == *"-----BEGIN"* ]]; then break fi - # それが最初の行である場合、またはすでにキーコンテンツの入力を開始している場合は、追加を続けます。 + # 如果是第一行或已经开始输入密钥内容,则继续添加 if [[ -n "$line" || "$password_or_key" == *"-----BEGIN"* ]]; then password_or_key+="${line}"$'\n' fi done - # キーコンテンツかどうかを確認する + # 检查是否是密钥内容 if [[ "$password_or_key" == *"-----BEGIN"* && "$password_or_key" == *"PRIVATE KEY-----"* ]]; then local key_file="$KEY_DIR/${name}_sync.key" echo -n "$password_or_key" > "$key_file" @@ -6203,63 +6203,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 @@ -6270,51 +6270,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 @@ -6322,32 +6322,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="" @@ -6355,66 +6355,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 ;; @@ -6423,9 +6423,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "選択が無効です。もう一度お試しください。" ;; + *) echo "无效的选择,请重试。" ;; esac - read -e -p "続行するには Enter キーを押してください..." + read -e -p "按回车键继续..." done } @@ -6440,7 +6440,7 @@ rsync_manager() { linux_info() { clear - send_stats "システム情報の問い合わせ" + send_stats "系统信息查询" ip_address @@ -6490,41 +6490,41 @@ 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" - 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 @@ -6537,111 +6537,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通信接続ツール" - 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}レンジャーファイル管理ツール" - 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 "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) @@ -6649,7 +6649,7 @@ linux_tools() { install btop clear btop - send_stats "btopをインストールする" + send_stats "安装btop" ;; 12) clear @@ -6658,7 +6658,7 @@ linux_tools() { clear ranger cd ~ - send_stats "レンジャーをインストールする" + send_stats "安装ranger" ;; 13) clear @@ -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 @@ -6694,7 +6694,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "ナノをインストールする" + send_stats "安装nano" ;; @@ -6705,7 +6705,7 @@ linux_tools() { clear git --help cd ~ - send_stats "gitをインストールする" + send_stats "安装git" ;; 21) @@ -6713,67 +6713,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 "ニンベーダーをインストールする" + 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 "インストールされているツール名 (wgetcurlsudohtop) を入力してください:" 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) @@ -6781,7 +6781,7 @@ linux_tools() { ;; *) - echo "無効な入力です!" + echo "无效的输入!" ;; esac break_end @@ -6795,27 +6795,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 "アルパインがBBR3をオープン" + send_stats "alpine开启bbr3" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6857,21 +6857,21 @@ docker_ssh_migration() { list_backups() { local BACKUP_ROOT="/tmp" - 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 -e -p "バックアップするコンテナの名前を入力してください (実行中のすべてのコンテナをバックアップするには、複数のスペースを区切って Enter キーを押します)。" containers + read -e -p "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " 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,28 +6892,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}検出されました$cdocker-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 -e -p "作成ディレクトリが検出されません。パスを手動で入力してください。" project_dir + 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}Compose 项目 [$project_name] 已备份过,跳过重复打包...${NC}" continue fi @@ -6921,137 +6921,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 恢复: $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}" + 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 -e -p "復元するバックアップ ディレクトリを入力してください:" BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリが存在しません${NC}"; return; } + send_stats "Docker还原" + 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 プロジェクトの復元を優先します --------- + # --------- 优先还原 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}Compose 项目 [$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" - 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 @@ -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 @@ -7095,68 +7095,68 @@ 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 "请输入要迁移的备份目录: " 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" - 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; } + 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}" } # ---------------------------- - # メインメニュー + # 主菜单 # ---------------------------- 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 -e -p "選択してください:" choice + read -e -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 @@ -7173,38 +7173,38 @@ linux_docker() { while true; do clear - # send_stats "ドッカー管理" + # 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}不要な 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 ;; @@ -7215,22 +7215,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 "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 "" @@ -7245,8 +7245,8 @@ linux_docker() { 5) while true; do clear - send_stats "Dockerネットワーク管理" - echo "Dockerネットワークリスト" + send_stats "Docker网络管理" + echo "Docker网络列表" echo "------------------------------------------------------------" docker network ls echo "" @@ -7270,36 +7270,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 @@ -7308,8 +7308,8 @@ linux_docker() { ;; 4) - send_stats "ネットワークを削除する" - read -e -p "削除するネットワーク名を入力してください:" dockernetwork + send_stats "删除网络" + read -e -p "请输入要删除的网络名: " dockernetwork docker network rm $dockernetwork ;; @@ -7323,29 +7323,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 @@ -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]) @@ -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,13 +7385,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) ;; @@ -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,151 +7462,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}Yeawu ストリーミング メディアのロック解除の検出" - 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 トリプルネットワークバックホール回線テスト" - 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}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}ベンチパフォーマンステスト" - 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 "Yeawu ストリーミング メディアのロック解除の検出" + 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 "超高速トリプルネットワーク速度テスト" + 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 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 "icu/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 ;; @@ -7616,7 +7616,7 @@ linux_test() { ;; *) - echo "無効な入力です!" + echo "无效的输入!" ;; esac break_end @@ -7632,51 +7632,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}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 "インストールしてもよろしいですか? (はい/いいえ):" 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 コアの数と占有率を入力するよう求めます。ユーザーが Enter キーを押すと、デフォルト値が使用されます。 - 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" \ @@ -7684,14 +7684,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 ;; @@ -7699,20 +7699,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 "続行してもよろしいですか? (はい/いいえ):" 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) @@ -7724,28 +7724,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 - 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) @@ -7756,15 +7756,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 +7785,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 +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 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}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 軽量ブログ 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 ブログ サイトをインストールする" - 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 +7872,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 +7898,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 +7934,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 - # AppleCMS + # 苹果CMS webname="苹果CMS" - send_stats "インストール$webname" - echo "導入を開始する$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7973,24 +7973,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 +8011,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 "ユーザー名: 管理者" - 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 +8075,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 +8088,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 +8113,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 +8126,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 +8152,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 +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格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8193,20 +8193,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 +8217,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 +8235,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 で終わる圧縮パッケージである必要があります。 Pagoda/1panel バックアップ データのインポートをサポートするには、/home/ ディレクトリに配置してください。" - 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 +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 @@ -8278,12 +8278,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 +8296,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 +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" @@ -8332,11 +8332,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 +8356,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 +8379,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 +8397,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 +8431,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 +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格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " 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 "请输入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,23 +8492,23 @@ 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 "バックアップ データをリモート サーバーに転送しますか? (はい/いいえ):" choice + echo "备份文件已创建: /home/$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 /home/*.tar.gz | head -1) @@ -8516,9 +8516,9 @@ 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 "文件已传送至远程服务器home目录。" else - echo "転送するファイルが見つかりませんでした。" + echo "未找到要传送的文件。" fi break ;; @@ -8526,7 +8526,7 @@ linux_ldnmp() { break ;; *) - echo "選択が無効です。Y または N を入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac done @@ -8534,9 +8534,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 @@ -8546,18 +8546,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 ;; *) @@ -8571,19 +8571,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 "Enter キーを押して最新のバックアップを復元し、バックアップ ファイル名を入力して指定したバックアップを復元し、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 @@ -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 ;; @@ -8620,11 +8620,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,13 +8644,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 @@ -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" - 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) (Enter キーを押して最新バージョンを取得します):" 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 @@ -8709,8 +8709,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 +8721,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 @@ -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]) @@ -8769,7 +8769,7 @@ linux_ldnmp() { ;; *) - echo "選択が無効です。Y または N を入力してください。" + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -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..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8813,71 +8813,71 @@ 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 リモート デスクトップ 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}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}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}メモウェブメモ${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}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}Xiaoya alistファミリーバケット" - echo -e "${gl_kjlan}39. ${color39}Bililive ライブ配信録画ツール${gl_kjlan}40. ${color40}webssh 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}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}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}ディープシークチャット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ツールツールボックス" - 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}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}Thunder オフライン ダウンロード ツール${gl_kjlan}78. ${color78}PandaWiki インテリジェント文書管理システム" - echo -e "${gl_kjlan}79. ${color79}Beszel サーバーの監視${gl_kjlan}80. ${color80}リンクワーデンのブックマーク管理" + 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}イミッチピクチャービデオマネージャー${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}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}ペーパーレス文書管理プラットフォーム${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}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}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 @@ -9030,8 +9030,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,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "ネザを構築する" + send_stats "搭建哪吒" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,20 +9073,20 @@ while true; do check_docker_app check_docker_image_update $docker_name clear - echo -e "ネザ監視$check_docker $update_status" - echo "オープンソースの軽量で使いやすいサーバー監視および運用保守ツール" - echo "公式 Web サイト構築ドキュメント: 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}}' 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 "0. 返回上一级选单" echo "------------------------" - read -e -p "選択内容を入力してください:" choice + read -e -p "输入你的选择: " choice case $choice in 1) @@ -9143,7 +9143,7 @@ while true; do ;; 9|mail) - send_stats "郵便局を建てる" + send_stats "搭建邮局" clear install telnet local app_id="9" @@ -9153,44 +9153,44 @@ 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}}' 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 + 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" @@ -9200,7 +9200,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "続行するには任意のキーを押してください..." + echo "按任意键继续..." read -n 1 -s -r -p "" install jq @@ -9219,9 +9219,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 "" @@ -9244,9 +9244,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 "" ;; @@ -9257,7 +9257,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "アプリがアンインストールされました" + echo "应用已卸载" ;; *) @@ -9291,7 +9291,7 @@ while true; do clear ip_address - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -9301,7 +9301,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 } @@ -9311,7 +9311,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "アプリがアンインストールされました" + echo "应用已卸载" } docker_app_plus @@ -9395,7 +9395,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -9409,7 +9409,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 @@ -9554,7 +9554,7 @@ while true; do ;; 19|safeline) - send_stats "雷のプールを作る" + send_stats "搭建雷池" local app_id="19" local docker_name=safeline-mgt @@ -9562,20 +9562,20 @@ while true; do while true; do check_docker_app clear - echo -e "サンダープールサービス$check_docker" - echo "Leichi は、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}}' 2>/dev/null | grep -q "$docker_name"; 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) @@ -9585,7 +9585,7 @@ while true; do add_app_id clear - echo "Leichi WAFパネルを導入しました" + echo "雷池WAF面板已经安装完成" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9598,7 +9598,7 @@ while true; do add_app_id clear - echo "Leichi WAF パネルが更新されました" + echo "雷池WAF面板已经更新完成" check_docker_app_ip ;; 3) @@ -9609,7 +9609,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" ;; *) @@ -9728,8 +9728,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 \ @@ -10017,7 +10017,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" @@ -10070,7 +10070,7 @@ while true; do ;; 38|xiaoya) - send_stats "シャオヤファミリーバケツ" + send_stats "小雅全家桶" clear install_docker check_disk_space 1 @@ -10274,9 +10274,9 @@ while true; do prometheus_install clear ip_address - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip - echo "初期のユーザー名とパスワードは次のとおりです: admin" + echo "初始用户名密码均为: admin" } docker_app_update() { @@ -10294,7 +10294,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "アプリがアンインストールされました" + echo "应用已卸载" } docker_app_plus @@ -10381,7 +10381,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 ;; @@ -10501,7 +10501,7 @@ while true; do docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -10516,7 +10516,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 @@ -10544,7 +10544,7 @@ while true; do docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -10559,7 +10559,7 @@ while true; do docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -10567,7 +10567,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 @@ -10588,17 +10588,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 "应用已更新" } @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "アプリがアンインストールされました" + echo "应用已卸载" } docker_app_plus @@ -10655,7 +10655,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 } @@ -10671,7 +10671,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 @@ -10933,7 +10933,7 @@ while true; do docker_rum() { - read -e -p "LibreTV のログイン パスワードを設定します。" app_passwd + read -e -p "设置LibreTV的登录密码: " app_passwd docker run -d \ --name libretv \ @@ -10967,9 +10967,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 @@ -10985,7 +10985,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -10999,7 +10999,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 @@ -11072,8 +11072,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 \ @@ -11170,11 +11170,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) @@ -11183,17 +11183,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 } @@ -11203,7 +11203,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11288,7 +11288,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 \ @@ -11392,7 +11392,7 @@ while true; do docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -11405,7 +11405,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 @@ -11566,7 +11566,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 @@ -11618,7 +11618,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -11632,7 +11632,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 @@ -11707,8 +11707,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} \ @@ -11756,7 +11756,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -11770,7 +11770,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 @@ -11810,7 +11810,7 @@ while true; do block_container_port "$docker_name" "$ipv4_address" clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -11824,7 +11824,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 @@ -11842,9 +11842,9 @@ 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 + read -e -p "请输入 WireGuard 网段 (默认 10.13.13.0): " NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11914,18 +11914,18 @@ while true; do sleep 2 echo - echo -e "${gl_huang}すべてのクライアント QR コード構成:${gl_bai}" + 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}" + 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 をダウンロードし、上の 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}${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 } @@ -11953,16 +11953,16 @@ while true; do local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" - # ディレクトリが存在しない場合は作成する + # 创建目录(如果不存在) mkdir -p "$(dirname "$CONFIG_FILE")" - echo "クライアント設定を貼り付け、Enter キーを 2 回押して保存してください。" + echo "请粘贴你的客户端配置,连续按两次回车保存:" - # 変数を初期化する + # 初始化变量 input="" empty_line_count=0 - # ユーザー入力を 1 行ずつ読み取ります + # 逐行读取用户输入 while IFS= read -r line; do if [[ -z "$line" ]]; then ((empty_line_count++)) @@ -11975,10 +11975,10 @@ while true; do fi done - # 設定ファイルの書き込み + # 写入配置文件 echo "$input" > "$CONFIG_FILE" - echo "クライアント設定の保存場所$CONFIG_FILE" + echo "客户端配置已保存到 $CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12023,10 +12023,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 @@ -12043,7 +12043,7 @@ while true; do docker compose up -d clear - echo "インストール完了" + echo "已经安装完成" check_docker_app_ip } @@ -12057,7 +12057,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 @@ -12097,24 +12097,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" - read -e -p "バックアップ データをリモート サーバーに転送しますか? (はい/いいえ):" choice + 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) @@ -12122,14 +12122,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项目,不包含宝塔,1panel等建站面板的数据备份。" break ;; esac @@ -12139,29 +12139,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 "Enter キーを押して最新のバックアップを復元し、バックアップ ファイル名を入力して指定したバックアップを復元し、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 ;; @@ -12184,35 +12184,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}ワークスペース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" - 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 @@ -12220,7 +12220,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "ワークスペースの開始$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -12228,63 +12228,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 ;; @@ -12296,21 +12296,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 ;; @@ -12326,29 +12326,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 @@ -12373,54 +12373,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}ネイティブホスト解像度${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}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}Tech 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 @@ -12428,34 +12428,34 @@ linux_Settings() { 2) clear - send_stats "ログインパスワードを設定する" - echo "ログインパスワードを設定する" + send_stats "设置你的登录密码" + echo "设置你的登录密码" passwd ;; 3) root_use - send_stats "rootパスワードモード" + 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 のバージョン番号を入力します (終了するには 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 @@ -12488,7 +12488,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 @@ -12517,55 +12517,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 @@ -12584,8 +12584,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 @@ -12600,51 +12600,51 @@ 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 "------------------------" 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 "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優先に切り替えました" + 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修復" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; *) @@ -12662,43 +12662,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 "已设置自定义虚拟内存" ;; *) @@ -12711,8 +12711,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 @@ -12723,62 +12723,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" ;; @@ -12791,50 +12791,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 "" @@ -12842,46 +12842,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. 美国西部时间 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 @@ -12924,21 +12924,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 @@ -12956,11 +12956,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 @@ -12968,32 +12968,32 @@ EOF 19) root_use - send_stats "システムアップデートソースを変更する" + send_stats "换系统更新源" clear - echo "更新元リージョンの選択" - echo "LinuxMirror にアクセスしてシステム アップデート ソースを切り替える" + 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 @@ -13001,62 +13001,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 # 跳出循环,退出菜单 @@ -13068,32 +13068,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 # 跳出循环,退出菜单 @@ -13104,24 +13104,24 @@ EOF 22) root_use - send_stats "SSH防御" + 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 -e "SSH防御程序 $check_f2b_status" + 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) f2b_install_sshd @@ -13143,7 +13143,7 @@ EOF 9) remove fail2ban rm -rf /etc/fail2ban - echo "Fail2Ban 防御プログラムがアンインストールされました" + echo "Fail2Ban防御程序已卸载" break ;; *) @@ -13156,47 +13156,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 - # しきい値_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 ~ @@ -13209,15 +13209,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 @@ -13230,40 +13230,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 @@ -13279,18 +13279,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 "続行してもよろしいですか? (はい/いいえ):" 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 @@ -13312,7 +13312,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 @@ -13323,21 +13323,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 @@ -13381,7 +13381,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; } @@ -13404,62 +13404,62 @@ EOF 41) clear - send_stats "掲示板" - echo "Technology Lion の公式掲示板をご覧ください。脚本についてのアイデアがあれば、メッセージを残して交換してください。" + send_stats "留言板" + echo "访问科技lion官方留言板,您对脚本有任何想法欢迎留言交流!" echo "https://board.kejilion.pro" - echo "公開パスワード: kejilion.sh" + echo "公共密码: kejilion.sh" ;; 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 "ワンクリックメンテナンスを実行してもよろしいですか? (はい/いいえ):" 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) @@ -13476,25 +13476,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 @@ -13502,7 +13502,7 @@ EOF 99) clear - send_stats "システムを再起動します" + send_stats "重启系统" server_reboot ;; 100) @@ -13518,32 +13518,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 @@ -13559,11 +13559,11 @@ EOF 102) clear - send_stats "Tech Lion スクリプトをアンインストールする" - echo "Tech Lion スクリプトをアンインストールする" + send_stats "卸载科技lion脚本" + echo "卸载科技lion脚本" echo "------------------------------------------------" - echo "kejilion スクリプトは、他の機能に影響を与えることなく完全にアンインストールされます。" - read -e -p "続行してもよろしいですか? (はい/いいえ):" choice + echo "将彻底卸载kejilion脚本,不影响你其他功能" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) @@ -13571,16 +13571,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 ;; @@ -13590,7 +13590,7 @@ EOF ;; *) - echo "無効な入力です!" + echo "无效的输入!" ;; esac break_end @@ -13608,187 +13608,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. 解压文件目录 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 "请输入远端服务器用户名 (默认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 @@ -14086,15 +14086,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 ;; *) @@ -14116,41 +14116,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スクリプト・コレクション" -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}Eudemons Parlu サーバー開始スクリプト" +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_info ;; - 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 ;; @@ -14161,13 +14161,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "Eudemons Parlu サーバー開始スクリプト" ; 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 @@ -14175,70 +14175,70 @@ 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 アップデートを更新 | kアップデート" -echo "クリーン系ジャンククリーン |きれいだ" -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 "rsync リモート同期ツール k rsync | k リモート同期" -echo "ハードディスク管理ツール k ディスク | k ハードディスクの管理" -echo "イントラネット普及率 (サーバー) k frps" -echo "イントラネット浸透率 (クライアント) k frpc" -echo "ソフトウェア起動 k start sshd | 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 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 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 ロード バランシング |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 お気に入り | k コマンドのお気に入り" -echo "アプリケーションマーケット管理kアプリ" -echo "申請番号の迅速な管理 k app 26 | kアプリ1パネル | k アプリ npm" -echo "システム情報を表示 k info" +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" +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 "显示系统信息 k info" } 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|更新) @@ -14272,7 +14272,7 @@ else rsync_run) shift - send_stats "スケジュールされたrsync同期" + send_stats "定时rsync同步" run_task "$@" ;; @@ -14291,7 +14291,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" @@ -14304,13 +14304,13 @@ else swap) shift - send_stats "仮想メモリをすばやくセットアップする" + send_stats "快速设置虚拟内存" add_swap "$@" ;; time|时区) shift - send_stats "タイムゾーンを素早く設定" + send_stats "快速设置时区" set_timedate "$@" ;; @@ -14358,42 +14358,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 @@ -14403,15 +14403,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 ;; *) @@ -14438,7 +14438,7 @@ else app) shift - send_stats "申し込む$@" + send_stats "应用$@" linux_panel "$@" ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index ea864da14..8a6ae43df 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -57,9 +57,9 @@ CheckFirstRun_true() { -# 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록하는 기능입니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! +# 이 기능은 함수에 묻혀있는 정보를 수집하고 사용자가 사용하는 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 시스템 국가 및 기능 이름을 기록합니다. 민감한 정보는 포함되어 있지 않으니 걱정하지 마세요! 저를 믿어주세요! # 이 기능은 왜 설계되었나요? 그 목적은 사용자가 사용하고 싶어하는 기능을 더 잘 이해하고, 기능을 더욱 최적화하고 사용자 요구에 맞는 더 많은 기능을 출시하는 것입니다. -# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 우려되는 사항이 있는 경우 이용을 거부하실 수 있습니다. +# send_stats 함수 호출 위치에 대한 전문을 검색할 수 있습니다. 투명하고 오픈 소스입니다. 불편하신 점이 있으시면 이용을 거부하실 수 있습니다. @@ -1122,14 +1122,14 @@ iptables_panel() { 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. 특정 국가 IP 차단 16. 특정 국가 IP만 허용" - echo "17. 지정된 국가에서 IP 제한을 해제합니다." + echo "17. 지정된 국가의 IP 제한을 해제합니다." echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -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" ;; @@ -1998,7 +1998,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 방어 끄기" @@ -2112,7 +2112,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}" @@ -2656,7 +2656,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 @@ -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 @@ -3185,16 +3185,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" } @@ -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 @@ -3620,7 +3620,7 @@ EOF donlond_frp frps - # 생성된 정보를 출력 + # 생성된 정보 출력 ip_address echo "------------------------" echo "클라이언트 배포에 필요한 매개변수" @@ -3682,7 +3682,7 @@ remote_port = ${remote_port} EOF - # 생성된 정보를 출력 + # 생성된 정보 출력 echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." docker restart frpc @@ -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" ;; @@ -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 ;; @@ -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 @@ -5038,7 +5038,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 @@ -5391,7 +5391,7 @@ Kernel_optimize() { cd ~ clear optimize_web_server - send_stats "웹사이트 최적화 모델" + send_stats "웹사이트 최적화 모드" ;; 4) cd ~ @@ -5837,7 +5837,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 @@ -5847,7 +5847,7 @@ add_connection() { 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" @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "하드디스크 관리 기능" while true; do clear - echo "하드 디스크 파티션 관리" + echo "하드 드라이브 파티션 관리" echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions @@ -6185,7 +6185,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 @@ -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" @@ -6694,7 +6694,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "나노 설치" + send_stats "安装nano" ;; @@ -6713,7 +6713,7 @@ linux_tools() { install cmatrix clear cmatrix - send_stats "cmatrix 설치" + send_stats "安装cmatrix" ;; 22) clear @@ -6746,34 +6746,34 @@ 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 ;; 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 컬 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) @@ -6781,7 +6781,7 @@ linux_tools() { ;; *) - echo "입력이 잘못되었습니다!" + echo "无效的输入!" ;; esac break_end @@ -6795,27 +6795,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 @@ -6857,21 +6857,21 @@ docker_ssh_migration() { list_backups() { local BACKUP_ROOT="/tmp" - 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 "도커 백업" + 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 "请输入要备份的容器名(多个空格分隔,回车备份全部运行中容器): " 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,28 +6892,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도커 작성 컨테이너입니다${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 -e -p "작성 디렉터리가 감지되지 않습니다. 경로를 수동으로 입력하세요." project_dir + 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}Compose 项目 [$project_name] 已备份过,跳过重复打包...${NC}" continue fi @@ -6921,137 +6921,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 恢复: $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}" + 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 "도커 복원" - read -e -p "복원할 백업 디렉터리를 입력하십시오:" BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉터리가 존재하지 않습니다.${NC}"; return; } + send_stats "Docker还原" + 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 프로젝트 복원 우선순위 지정 --------- + # --------- 优先还原 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 프로젝트의 컨테이너가 이미 실행 중인지 확인하세요. + # 检查该 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 -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" - 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 @@ -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 @@ -7095,68 +7095,68 @@ docker_ssh_migration() { # ---------------------------- - # 이주하다 + # 迁移 # ---------------------------- migrate_docker() { - send_stats "도커 마이그레이션" + 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 - 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" - 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; } + 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}" } # ---------------------------- - # 메인 메뉴 + # 主菜单 # ---------------------------- 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. 도커 프로젝트 백업" - echo -e "2. 도커 프로젝트 마이그레이션" - echo -e "3. 도커 프로젝트 복원" - 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 -e -p "선택하세요:" choice + read -e -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 @@ -7173,38 +7173,38 @@ linux_docker() { while true; do clear - # send_stats "도커 관리" - 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 전역 상태 보기${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 "도커 환경 설치" + send_stats "安装docker环境" install_add_docker ;; @@ -7215,22 +7215,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 "Docker 볼륨:${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 "" @@ -7245,8 +7245,8 @@ linux_docker() { 5) while true; do clear - send_stats "도커 네트워크 관리" - echo "도커 네트워크 목록" + send_stats "Docker网络管理" + echo "Docker网络列表" echo "------------------------------------------------------------" docker network ls echo "" @@ -7270,36 +7270,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 @@ -7308,8 +7308,8 @@ linux_docker() { ;; 4) - send_stats "네트워크 삭제" - read -e -p "삭제할 네트워크 이름을 입력하세요:" dockernetwork + send_stats "删除网络" + read -e -p "请输入要删除的网络名: " dockernetwork docker network rm $dockernetwork ;; @@ -7323,29 +7323,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 @@ -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]) @@ -7363,7 +7363,7 @@ linux_docker() { [Nn]) ;; *) - echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -7376,7 +7376,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]) @@ -7385,13 +7385,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) ;; @@ -7407,13 +7407,13 @@ linux_docker() { 11) clear - send_stats "도커 v6 켜짐" + send_stats "Docker v6 开" docker_ipv6_on ;; 12) clear - send_stats "도커 v6 닫기" + send_stats "Docker v6 关" docker_ipv6_off ;; @@ -7424,7 +7424,7 @@ linux_docker() { 20) clear - send_stats "도커 제거" + 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,151 +7462,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}예우 스트리밍 미디어 잠금 해제 감지" - 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 삼중 네트워크 백홀 회선 테스트" - 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 세 개의 네트워크 라인 테스트" - 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}벤치 성능 테스트" - 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 "예우 스트리밍 미디어 잠금 해제 감지" + 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 "초고속 트리플 네트워크 속도 테스트" + 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 "벤치 성능 테스트" + 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 ;; @@ -7616,7 +7616,7 @@ linux_test() { ;; *) - echo "입력이 잘못되었습니다!" + echo "无效的输入!" ;; esac break_end @@ -7632,51 +7632,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}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 "정말로 설치하시겠습니까? (예/아니요):" 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 코어 수와 점유율을 입력하라는 메시지를 표시합니다. 사용자가 Enter 키를 누르면 기본값이 사용됩니다. - 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容器 docker run -itd --name=lookbusy --restart=always \ -e TZ=Asia/Shanghai \ -e CPU_UTIL="$cpu_util" \ @@ -7684,14 +7684,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 ;; @@ -7699,20 +7699,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 "계속하시겠습니까? (예/아니요):" 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. 우분투20.04:" sys_choice + read -e -p "请选择要重装的系统: 1. Debian12 | 2. Ubuntu20.04 : " sys_choice case "$sys_choice" in 1) @@ -7724,28 +7724,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 - 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) @@ -7756,15 +7756,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 +7785,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 +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}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 포럼 웹사이트 설치${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 +7872,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 +7898,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 +7934,20 @@ linux_ldnmp() { restart_ldnmp ldnmp_web_on - echo "데이터베이스 주소: mysql" - echo "사용자 이름:$dbuse" - echo "비밀번호:$dbusepasswd" - echo "데이터베이스 이름:$dbname" - echo "레디스 호스트: 레디스" + echo "数据库地址: mysql" + echo "用户名: $dbuse" + echo "密码: $dbusepasswd" + echo "数据库名: $dbname" + echo "redis主机: redis" ;; 5) clear - # AppleCMS + # 苹果CMS webname="苹果CMS" - send_stats "설치하다$webname" - echo "배포 시작$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7973,24 +7973,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 +8011,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 "레디스 주소 : 레디스" - echo "redis 비밀번호: 기본적으로 입력되지 않음" - echo "레디스 포트: 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论坛 webname="flarum论坛" - send_stats "설치하다$webname" - echo "배포 시작$webname" + send_stats "安装$webname" + echo "开始部署 $webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8075,12 +8075,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 +8088,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 +8113,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 +8126,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 +8152,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 +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格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8193,20 +8193,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 +8217,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 +8235,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로 끝나는 압축 패키지여야 합니다. Pagoda/1panel 백업 데이터 가져오기를 지원하려면 /home/ 디렉토리에 넣으십시오." - 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 +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 @@ -8278,12 +8278,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 +8296,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 +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" @@ -8332,11 +8332,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 +8356,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 +8379,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 +8397,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 +8431,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 +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格式的源码包,请将源码包放到/home/web/html/${yuming}目录下" + read -e -p "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " 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 "请输入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,23 +8492,23 @@ 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 "백업 데이터를 원격 서버로 전송하시겠습니까? (예/아니요):" choice + echo "备份文件已创建: /home/$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 /home/*.tar.gz | head -1) @@ -8516,9 +8516,9 @@ 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 "文件已传送至远程服务器home目录。" else - echo "전송할 파일을 찾을 수 없습니다." + echo "未找到要传送的文件。" fi break ;; @@ -8526,7 +8526,7 @@ linux_ldnmp() { break ;; *) - echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." + echo "无效的选择,请输入 Y 或 N。" ;; esac done @@ -8534,9 +8534,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 @@ -8546,18 +8546,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 ;; *) @@ -8571,19 +8571,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 "최신 백업을 복원하려면 Enter 키를 누르고, 지정된 백업을 복원하려면 백업 파일 이름을 입력하고, 종료하려면 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 @@ -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 ;; @@ -8620,11 +8620,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,13 +8644,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 @@ -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" - 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)(최신 버전을 얻으려면 Enter 키를 누르세요):" 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 @@ -8709,8 +8709,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 +8721,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 @@ -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]) @@ -8769,7 +8769,7 @@ linux_ldnmp() { ;; *) - echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." + echo "无效的选择,请输入 Y 或 N。" ;; esac ;; @@ -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..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8813,71 +8813,71 @@ while true; do fi done - 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}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}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}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-오늘 예약된 작업 관리 프레임워크" - 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 패널 탐색 패널${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}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}도커 가속 스테이션${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}라마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}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}비트워든 비밀번호 관리자${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}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}코마리 서버 모니터링 도구${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}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}종이 없는 문서 관리 플랫폼${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}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}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 @@ -9030,8 +9030,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,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "네자 빌드" + send_stats "搭建哪吒" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,20 +9073,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 "哪吒监控 $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 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) @@ -9143,7 +9143,7 @@ while true; do ;; 9|mail) - send_stats "우체국을 짓다" + send_stats "搭建邮局" clear install telnet local app_id="9" @@ -9153,44 +9153,44 @@ 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}}' 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 + 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" @@ -9200,7 +9200,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "계속하려면 아무 키나 누르세요..." + echo "按任意键继续..." read -n 1 -s -r -p "" install jq @@ -9219,9 +9219,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 "" @@ -9244,9 +9244,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 "" ;; @@ -9257,7 +9257,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "앱이 제거되었습니다." + echo "应用已卸载" ;; *) @@ -9291,7 +9291,7 @@ while true; do clear ip_address - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -9301,7 +9301,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 } @@ -9311,7 +9311,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "앱이 제거되었습니다." + echo "应用已卸载" } docker_app_plus @@ -9395,7 +9395,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -9409,7 +9409,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 @@ -9554,7 +9554,7 @@ while true; do ;; 19|safeline) - send_stats "천둥 웅덩이를 만들어라" + send_stats "搭建雷池" local app_id="19" local docker_name=safeline-mgt @@ -9562,20 +9562,20 @@ while true; do while true; do check_docker_app clear - echo -e "썬더 풀 서비스$check_docker" - echo "레이치(Leichi)는 창팅테크놀로지(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}}' 2>/dev/null | grep -q "$docker_name"; 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) @@ -9585,7 +9585,7 @@ while true; do add_app_id clear - echo "Leichi WAF 패널이 설치되었습니다." + echo "雷池WAF面板已经安装完成" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9598,7 +9598,7 @@ while true; do add_app_id clear - echo "Leichi WAF 패널이 업데이트되었습니다." + echo "雷池WAF面板已经更新完成" check_docker_app_ip ;; 3) @@ -9609,7 +9609,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" ;; *) @@ -9728,8 +9728,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 \ @@ -10017,7 +10017,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" @@ -10070,7 +10070,7 @@ while true; do ;; 38|xiaoya) - send_stats "Xiaoya 가족 버킷" + send_stats "小雅全家桶" clear install_docker check_disk_space 1 @@ -10274,9 +10274,9 @@ while true; do prometheus_install clear ip_address - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip - echo "초기 사용자 이름과 비밀번호는 admin입니다." + echo "初始用户名密码均为: admin" } docker_app_update() { @@ -10294,7 +10294,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "앱이 제거되었습니다." + echo "应用已卸载" } docker_app_plus @@ -10381,7 +10381,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 ;; @@ -10501,7 +10501,7 @@ while true; do docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -10516,7 +10516,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 @@ -10544,7 +10544,7 @@ while true; do docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -10559,7 +10559,7 @@ while true; do docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -10567,7 +10567,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 @@ -10588,17 +10588,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 "应用已更新" } @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "앱이 제거되었습니다." + echo "应用已卸载" } docker_app_plus @@ -10655,7 +10655,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 } @@ -10671,7 +10671,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 @@ -10933,7 +10933,7 @@ while true; do docker_rum() { - read -e -p "LibreTV 로그인 비밀번호 설정:" app_passwd + read -e -p "设置LibreTV的登录密码: " app_passwd docker run -d \ --name libretv \ @@ -10967,9 +10967,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 @@ -10985,7 +10985,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -10999,7 +10999,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 @@ -11072,8 +11072,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 \ @@ -11170,11 +11170,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) @@ -11183,17 +11183,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 } @@ -11203,7 +11203,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11288,7 +11288,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 \ @@ -11392,7 +11392,7 @@ while true; do docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -11405,7 +11405,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 @@ -11566,7 +11566,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 @@ -11618,7 +11618,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -11632,7 +11632,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 @@ -11707,8 +11707,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} \ @@ -11756,7 +11756,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -11770,7 +11770,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 @@ -11810,7 +11810,7 @@ while true; do block_container_port "$docker_name" "$ipv4_address" clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -11824,7 +11824,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 @@ -11842,9 +11842,9 @@ 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 + read -e -p "请输入 WireGuard 网段 (默认 10.13.13.0): " NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11914,18 +11914,18 @@ while true; do sleep 2 echo - echo -e "${gl_huang}모든 클라이언트 QR 코드 구성:${gl_bai}" + 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}" + 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을 다운로드하고 위의 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}${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 } @@ -11953,16 +11953,16 @@ while true; do local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" - # 디렉터리가 없으면 생성 + # 创建目录(如果不存在) mkdir -p "$(dirname "$CONFIG_FILE")" - echo "클라이언트 구성을 붙여넣고 Enter를 두 번 눌러 저장하세요." + echo "请粘贴你的客户端配置,连续按两次回车保存:" - # 변수 초기화 + # 初始化变量 input="" empty_line_count=0 - # 사용자 입력을 한 줄씩 읽습니다. + # 逐行读取用户输入 while IFS= read -r line; do if [[ -z "$line" ]]; then ((empty_line_count++)) @@ -11975,10 +11975,10 @@ while true; do fi done - # 구성 파일 쓰기 + # 写入配置文件 echo "$input" > "$CONFIG_FILE" - echo "클라이언트 구성이 다음에 저장되었습니다.$CONFIG_FILE" + echo "客户端配置已保存到 $CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12023,10 +12023,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 @@ -12043,7 +12043,7 @@ while true; do docker compose up -d clear - echo "설치 완료" + echo "已经安装完成" check_docker_app_ip } @@ -12057,7 +12057,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 @@ -12097,24 +12097,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" - read -e -p "백업 데이터를 원격 서버로 전송하시겠습니까? (예/아니요):" choice + 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) @@ -12122,14 +12122,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 등 웹사이트 구축 패널의 데이터 백업은 포함되지 않습니다." + echo "注意: 目前备份仅包含docker项目,不包含宝塔,1panel等建站面板的数据备份。" break ;; esac @@ -12139,29 +12139,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 "최신 백업을 복원하려면 Enter 키를 누르고, 지정된 백업을 복원하려면 백업 파일 이름을 입력하고, 종료하려면 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 ;; @@ -12184,35 +12184,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 @@ -12220,7 +12220,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "작업공간 시작$SESSION_NAME" + send_stats "启动工作区$SESSION_NAME" tmux_run ;; @@ -12228,63 +12228,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 ;; @@ -12296,21 +12296,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 ;; @@ -12326,29 +12326,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 "다음과 같이 백그라운드에서 실행하려는 명령을 입력하십시오. 컬 -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 @@ -12373,54 +12373,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}기본 호스트 확인${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}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 @@ -12428,34 +12428,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 "현재 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 @@ -12488,7 +12488,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 @@ -12517,55 +12517,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 @@ -12584,8 +12584,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 @@ -12600,51 +12600,51 @@ 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 "------------------------" 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 "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 우선순위로 전환됨" + 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 수리" + echo "该功能由jhb大神提供,感谢他!" + send_stats "ipv6修复" ;; *) @@ -12662,43 +12662,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 "已设置自定义虚拟内存" ;; *) @@ -12711,8 +12711,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 @@ -12723,62 +12723,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" ;; @@ -12791,50 +12791,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 "" @@ -12842,46 +12842,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. 美国西部时间 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 @@ -12924,21 +12924,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 @@ -12956,11 +12956,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 @@ -12968,32 +12968,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 @@ -13001,62 +13001,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 # 跳出循环,退出菜单 @@ -13068,32 +13068,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 # 跳出循环,退出菜单 @@ -13104,24 +13104,24 @@ EOF 22) root_use - send_stats "SSH 방어" + 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 -e "SSH防御程序 $check_f2b_status" + 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) f2b_install_sshd @@ -13143,7 +13143,7 @@ EOF 9) remove fail2ban rm -rf /etc/fail2ban - echo "Fail2Ban 방어 프로그램이 제거되었습니다." + echo "Fail2Ban防御程序已卸载" break ;; *) @@ -13156,47 +13156,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 ~ @@ -13209,15 +13209,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 @@ -13230,40 +13230,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 @@ -13279,18 +13279,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 로봇 API 및 사용자 ID를 구성해야 합니다." - echo "임계값에 도달하면 경고 메시지가 사용자에게 전송됩니다." - echo -e "${gl_hui}- 트래픽에 관해서는 서버를 다시 시작하면 다시 계산됩니다 -${gl_bai}" - read -e -p "계속하시겠습니까? (예/아니요):" 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 @@ -13312,7 +13312,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 @@ -13323,21 +13323,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 @@ -13381,7 +13381,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; } @@ -13404,62 +13404,62 @@ EOF 41) clear - send_stats "메시지 보드" - echo "Technology Lion 공식 게시판을 방문해 보세요. 스크립트에 대한 아이디어가 있으시면 교환 메시지를 남겨주세요!" + send_stats "留言板" + echo "访问科技lion官方留言板,您对脚本有任何想法欢迎留言交流!" echo "https://board.kejilion.pro" - echo "공개 비밀번호: kejilion.sh" + echo "公共密码: kejilion.sh" ;; 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 "원클릭 유지 관리를 원하시나요? (예/아니요):" 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) @@ -13476,25 +13476,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 @@ -13502,7 +13502,7 @@ EOF 99) clear - send_stats "시스템을 다시 시작하세요" + send_stats "重启系统" server_reboot ;; 100) @@ -13518,32 +13518,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 @@ -13559,11 +13559,11 @@ EOF 102) clear - send_stats "기술 사자 스크립트 제거" - echo "기술 사자 스크립트 제거" + send_stats "卸载科技lion脚本" + echo "卸载科技lion脚本" echo "------------------------------------------------" - echo "kejilion 스크립트는 다른 기능에 영향을 주지 않고 완전히 제거됩니다." - read -e -p "계속하시겠습니까? (예/아니요):" choice + echo "将彻底卸载kejilion脚本,不影响你其他功能" + read -e -p "确定继续吗?(Y/N): " choice case "$choice" in [Yy]) @@ -13571,16 +13571,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 ;; @@ -13590,7 +13590,7 @@ EOF ;; *) - echo "입력이 잘못되었습니다!" + echo "无效的输入!" ;; esac break_end @@ -13608,187 +13608,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. 解压文件目录 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 @@ -14086,15 +14086,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 ;; *) @@ -14116,41 +14116,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}Eudemons Parlu 서버 오픈 스크립트" +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_info ;; - 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 ;; @@ -14161,13 +14161,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "Eudemons Parlu 서버 오픈 스크립트" ; 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 @@ -14175,70 +14175,70 @@ 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 제거 nano wget | k 델 나노 wget | k 나노 wget 제거 | k 나노 wget 제거" -echo "시스템 k 업데이트 업데이트 | 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 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 "도커 관리 플레인 k 도커" -echo "docker 환경 설치 k docker 설치 |k docker 설치" -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 "역방향 프록시 설치 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 즐겨찾기 | k 명령 즐겨찾기" -echo "애플리케이션 시장 관리 k app" -echo "신청번호의 빠른 관리 k app 26 | k 앱 1패널 | k 앱 npm" -echo "시스템 정보 표시 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" +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 "显示系统信息 k info" } 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|更新) @@ -14272,7 +14272,7 @@ else rsync_run) shift - send_stats "예약된 rsync 동기화" + send_stats "定时rsync同步" run_task "$@" ;; @@ -14291,7 +14291,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" @@ -14304,13 +14304,13 @@ else swap) shift - send_stats "가상 메모리를 빠르게 설정하세요" + send_stats "快速设置虚拟内存" add_swap "$@" ;; time|时区) shift - send_stats "시간대를 빠르게 설정" + send_stats "快速设置时区" set_timedate "$@" ;; @@ -14358,42 +14358,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 @@ -14403,15 +14403,15 @@ else shift case $1 in install|安装) - send_stats "도커를 빠르게 설치하세요" + send_stats "快捷安装docker" install_docker ;; ps|容器) - send_stats "빠른 컨테이너 관리" + send_stats "快捷容器管理" docker_ps ;; img|镜像) - send_stats "빠른 이미지 관리" + send_stats "快捷镜像管理" docker_image ;; *) @@ -14438,7 +14438,7 @@ else app) shift - send_stats "신청$@" + send_stats "应用$@" linux_panel "$@" ;; diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 3451ec1e0..99c11b586 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -3398,7 +3398,7 @@ ldnmp_web_status() { send_stats "更換站點域名" echo -e "${gl_hong}強烈建議:${gl_bai}先備份好全站資料再更換站點網域!" read -e -p "請輸入舊網域名稱:" oddyuming - read -e -p "請輸入新網域名稱:" yuming + read -e -p "請輸入新網域:" yuming install_certbot install_ssltls certs_status @@ -3445,7 +3445,7 @@ ldnmp_web_status() { send_stats "建立關聯站點" echo -e "為現有的站點再關聯一個新網域用於訪問" read -e -p "請輸入現有的網域名稱:" oddyuming - read -e -p "請輸入新網域名稱:" yuming + read -e -p "請輸入新網域:" yuming install_certbot install_ssltls certs_status From 0e56924766d2273a4801ecb3235d440bed0b51e5 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 19 Apr 2026 05:25:13 +0000 Subject: [PATCH 29/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202026-04-19=2005:25:13?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 18 +- jp/kejilion.sh | 4716 ++++++++++++++++++++++++------------------------ kr/kejilion.sh | 2490 ++++++++++++------------- tw/kejilion.sh | 8 +- 4 files changed, 3616 insertions(+), 3616 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 628edb8e3..9a13e943d 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -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 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 @@ -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 setup is complete!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is completed!${gl_bai}" } @@ -6119,7 +6119,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 @@ -6326,7 +6326,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 @@ -6951,7 +6951,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") @@ -7479,7 +7479,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}------------------------" @@ -9153,7 +9153,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" @@ -13839,7 +13839,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 @@ -14175,7 +14175,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 d95435dd8..3613bed36 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}テクノロジー ライオン スクリプト ツールボックスへようこそ${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 @@ -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 "最小需求空间: ${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 @@ -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 @@ -261,14 +261,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" @@ -281,43 +281,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 } @@ -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}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 @@ -502,63 +502,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]) @@ -567,28 +567,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 "------------------------------------------------------------" @@ -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) @@ -622,8 +622,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) @@ -642,44 +642,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]) @@ -688,7 +688,7 @@ while true; do [Nn]) ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "選択が無効です。Y または N を入力してください。" ;; esac ;; @@ -756,16 +756,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}" } @@ -777,27 +777,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 @@ -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 状态 + # 現在の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,117 +872,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がブロックされました" } @@ -992,7 +992,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 @@ -1002,12 +1002,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 @@ -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_code 的 IP 区域文件失败" + echo "エラー: ダウンロード$country_codeIPゾーンファイルが失敗しました" continue fi @@ -1052,7 +1052,7 @@ manage_country_rules() { iptables -I INPUT -m set --match-set "$ipset_name" src -j DROP - echo "已成功阻止 $country_code 的 IP 地址" + echo "正常にブロックされました$country_codeIPアドレス" rm "${country_code,,}.zone" ;; @@ -1062,7 +1062,7 @@ manage_country_rules() { fi if ! wget -q "$download_url" -O "${country_code,,}.zone"; then - echo "错误:下载 $country_code 的 IP 区域文件失败" + 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_code 的 IP 地址" + echo "正常に許可されました$country_codeIPアドレス" rm "${country_code,,}.zone" ;; @@ -1086,11 +1086,11 @@ manage_country_rules() { ipset destroy "$ipset_name" fi - echo "已成功解除 $country_code 的 IP 地址限制" + echo "正常に削除されました$country_codeIPアドレス制限" ;; *) - echo "用法: manage_country_rules {block|allow|unblock} " + echo "使用法: manage_country_rules {block|allow|unblock} " ;; esac done @@ -1111,42 +1111,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. 指定した国の IP をブロックする 16. 指定した国の IP のみを許可する" + echo "17. 指定国における知的財産制限を解除する" 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 @@ -1159,10 +1159,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 @@ -1175,40 +1175,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 @@ -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_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" ;; *) @@ -1250,23 +1250,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 @@ -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 @@ -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}" @@ -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 @@ -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 @@ -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,15 +1446,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 "" } @@ -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" @@ -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 "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 @@ -1542,7 +1542,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 @@ -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,8 +1616,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}仕上げる" } @@ -1636,11 +1636,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" } @@ -1650,29 +1650,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_FILECF 情報は後で変更できます。" + 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 "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 @@ -1696,28 +1696,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 @@ -1733,23 +1733,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 @@ -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,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" 的行前 + # 「Happy Publishing」を含む行の前に新しい定義を挿入します。 awk -v insert="define('WP_DEBUG_DISPLAY', $DEBUG_DISPLAY);\ndefine('WP_DEBUG_LOG', $DEBUG_LOG);" \ ' /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:加上注释 + # ブロトリを閉じる: コメントを追加 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 "无效的参数:使用 '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 @@ -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,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 @@ -1983,31 +1983,31 @@ nginx_gzip() { web_security() { - send_stats "LDNMP环境防御" + send_stats "LDNMP環境防御" while true; do check_f2b_status check_waf_status check_cf_mode clear - echo -e "服务器网站防御程序 ${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. 查看网站拦截记录" - echo "7. 查看防御规则列表 8. 查看日志实时监控" + echo "5. SSH 傍受記録の表示 6. Web サイト傍受記録の表示" + echo "7. 防御ルールのリストを表示します。 8. リアルタイム監視のログを表示します。" echo "------------------------" - echo "11. 配置拦截参数 12. 清除所有拉黑的IP" + 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防御" + 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 @@ -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模式" - echo "到cf后台右上角我的个人资料,选择左侧API令牌,获取Global API Key" + send_stats "クラウドフレアモード" + 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 @@ -2107,21 +2107,21 @@ 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}" + 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 -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 @@ -2138,23 +2138,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) @@ -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 @@ -2198,21 +2198,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 @@ -2228,33 +2228,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 @@ -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 @@ -2278,23 +2278,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 @@ -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 @@ -2316,7 +2316,7 @@ web_optimization() { restart_redis optimize_web_server - echo "LDNMP环境已设置成 高性能模式" + echo "LDNMP 環境が高パフォーマンス モードに設定されている" ;; 3) @@ -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 # } @@ -2386,7 +2386,7 @@ check_docker_app() { check_docker_app_ip() { echo "------------------------" -echo "访问地址:" +echo "訪問先住所:" ip_address @@ -2424,31 +2424,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 @@ -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,34 +2477,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 @@ -2514,7 +2514,7 @@ block_container_port() { fi - echo "已阻止IP+端口访问该服务" + echo "IP+ポートはサービスへのアクセスをブロックされています" save_iptables_rules } @@ -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 @@ -2554,17 +2554,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 +2575,7 @@ clear_container_rules() { fi - echo "已允许IP+端口访问该服务" + echo "IP+ポートによるサービスへのアクセスが許可されました" save_iptables_rules } @@ -2589,25 +2589,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 +2616,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 +2648,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,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. 阻止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) 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,12 +2771,12 @@ while true; do 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 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,19 +2860,19 @@ 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) 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,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" @@ -3063,11 +3063,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 +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 @@ -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,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 @@ -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,16 +3185,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 +3206,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 @@ -3247,17 +3247,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 @@ -3280,14 +3280,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 @@ -3340,12 +3340,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//') @@ -3358,35 +3358,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 @@ -3395,15 +3395,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') @@ -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" {} + @@ -3442,10 +3442,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 @@ -3459,25 +3459,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 @@ -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 "官网介绍: $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 @@ -3541,20 +3541,20 @@ while true; do panel_app_install add_app_id - send_stats "${panelname}安装" + send_stats "${panelname}インストール" ;; 2) panel_app_manage 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 @@ -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,17 +3620,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 @@ -3640,9 +3640,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 @@ -3662,17 +3662,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 を入力してください [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 + 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_name 已成功添加到 frpc.toml" + # 生成された情報を出力する + echo "仕える$service_namefrpc.toml に正常に追加されました" docker restart frpc @@ -3694,12 +3694,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 @@ -3709,7 +3709,7 @@ delete_forwarding_service() { list_forwarding_services() { local config_file="$1" - # 打印表头 + # ヘッダーを印刷します printf "%-20s %-25s %-30s %-10s\n" "服务名称" "内网地址" "外网地址" "协议" awk ' @@ -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, \ @@ -3739,11 +3739,11 @@ list_forwarding_services() { type } - # 更新当前服务名称 + # 現在のサービス名を更新します if ($1 != "[common]") { gsub(/[\[\]]/, "", $1) current_service=$1 - # 清除之前的值 + # 前回の値をクリア local_ip="" local_port="" remote_port="" @@ -3772,7 +3772,7 @@ list_forwarding_services() { } END { - # 打印最后一个服务的信息 + # 最後のサービスに関する情報を出力します 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 @@ -3804,18 +3804,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 @@ -3824,7 +3824,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}" @@ -3851,7 +3851,7 @@ frps_main_ports() { frps_panel() { - send_stats "FRP服务端" + send_stats "FRPサーバー" local app_id="55" local docker_name="frps" local docker_port=8056 @@ -3859,25 +3859,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 @@ -3885,7 +3885,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 +3895,7 @@ frps_panel() { donlond_frp frps add_app_id - echo "FRP服务端已经更新完成" + echo "FRPサーバーを更新しました" ;; 3) crontab -l | grep -v 'frps' | crontab - > /dev/null 2>&1 @@ -3906,37 +3906,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サービスステータスが更新されました" ;; *) @@ -3949,7 +3949,7 @@ frps_panel() { frpc_panel() { - send_stats "FRP客户端" + send_stats "FRPクライアント" local app_id="56" local docker_name="frpc" local docker_port=8055 @@ -3957,10 +3957,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 @@ -3968,13 +3968,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 @@ -3982,7 +3982,7 @@ frpc_panel() { configure_frpc add_app_id - echo "FRP客户端已经安装完成" + echo "FRPクライアントがインストールされています" ;; 2) crontab -l | grep -v 'frpc' | crontab - > /dev/null 2>&1 @@ -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,68 +4049,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. 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 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..." - 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 \ @@ -4118,31 +4118,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" ;; *) @@ -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 @@ -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 @@ -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,13 +4243,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 @@ -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 "清理未使用的依赖..." + 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 @@ -4327,26 +4327,26 @@ 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地址" + 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" @@ -4354,7 +4354,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,14 +4362,14 @@ 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 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 设置为 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/' \ @@ -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" @@ -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 @@ -4460,17 +4460,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 @@ -4488,7 +4488,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}" } @@ -4497,26 +4497,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 @@ -4527,41 +4527,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" @@ -4577,21 +4577,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 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 + 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,49 +4599,49 @@ 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 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 @@ -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 @@ -4666,7 +4666,7 @@ dd_xitong() { ;; 23) - send_stats "重装alma10" + send_stats "alma10を再インストールする" dd_xitong_3 bash reinstall.sh almalinux 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 @@ -4714,7 +4714,7 @@ dd_xitong() { ;; 29) - send_stats "重装centos10" + send_stats "centos10を再インストールする" dd_xitong_3 bash reinstall.sh centos 10 reboot @@ -4722,7 +4722,7 @@ dd_xitong() { ;; 30) - send_stats "重装centos9" + send_stats "centos9を再インストールする" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -4730,7 +4730,7 @@ dd_xitong() { ;; 31) - send_stats "重装alpine" + send_stats "アルパインを再インストールする" dd_xitong_1 bash InstallNET.sh -alpine reboot @@ -4738,7 +4738,7 @@ dd_xitong() { ;; 32) - send_stats "重装arch" + send_stats "アーチを再インストールする" dd_xitong_3 bash reinstall.sh arch reboot @@ -4746,7 +4746,7 @@ dd_xitong() { ;; 33) - send_stats "重装kali" + send_stats "kaliを再インストールする" dd_xitong_3 bash reinstall.sh kali reboot @@ -4754,7 +4754,7 @@ dd_xitong() { ;; 34) - send_stats "重装openeuler" + send_stats "オープニューラーを再インストールする" dd_xitong_3 bash reinstall.sh openeuler 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 "重装windows10" + send_stats "Windows 10を再インストールする" 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 @@ -4802,7 +4802,7 @@ dd_xitong() { ;; 44) - send_stats "重装windows server 25" + send_stats "Windowsサーバー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 "Windowsサーバー22を再インストールします" dd_xitong_2 bash InstallNET.sh -windows 2022 -lang "cn" 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 @@ -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 @@ -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 "------------------------" - 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) @@ -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内核开启BBR3" + echo "Debian/Ubuntu のみをサポートします" + 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+') @@ -4949,17 +4949,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 +4968,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 } @@ -5009,37 +5009,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 "------------------------" - 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 "Red Hat カーネルをアンインストールする" server_reboot ;; @@ -5052,26 +5052,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 "続行してもよろしいですか? (はい/いいえ):" 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 @@ -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 \ @@ -5092,19 +5092,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 +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 \ @@ -5122,8 +5122,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}" } @@ -5135,23 +5135,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 @@ -5160,7 +5160,7 @@ clamav() { ;; 2) - send_stats "重要目录扫描" + send_stats "重要なディレクトリのスキャン" install_docker docker volume create clam_db > /dev/null 2>&1 clamav_freshclam @@ -5168,8 +5168,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 +5186,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 +5212,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 @@ -5253,36 +5253,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 @@ -5294,37 +5294,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 } -# 网站搭建优化函数 +# Webサイト構築最適化機能 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 +5336,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 @@ -5356,62 +5356,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 サイト最適化モード: 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 @@ -5438,7 +5438,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 @@ -5447,17 +5447,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 } @@ -5467,29 +5467,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 +5511,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 +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}#" @@ -5535,9 +5535,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 +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 "启用后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 +5615,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 +5623,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 ;; *) @@ -5650,23 +5650,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 "- Enter キーを押して、デフォルトのディレクトリ (/etc /usr /home) を使用します。" + read -r -p "バックアップするディレクトリを入力してください (複数のディレクトリをスペースで区切って、Enter キーを押してデフォルトのディレクトリを使用します)。" input - # 如果用户没有输入目录,则使用默认目录 + # ユーザーがディレクトリを入力しない場合は、デフォルトのディレクトリが使用されます。 if [ -z "$input" ]; then BACKUP_PATHS=( "/etc" # 配置文件和软件包配置 @@ -5674,119 +5674,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 } @@ -5798,56 +5798,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 "キーの内容を貼り付けてください (貼り付け後に 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" @@ -5856,89 +5856,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 @@ -5950,21 +5950,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 } @@ -5980,156 +5980,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 ;; @@ -6138,64 +6138,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 "- リモートディレクトリ: /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 "キーの内容を貼り付けてください (貼り付け後に 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 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,63 +6203,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 @@ -6270,51 +6270,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 @@ -6322,32 +6322,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="" @@ -6355,66 +6355,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 ;; @@ -6423,9 +6423,9 @@ rsync_manager() { 5) schedule_task ;; 6) delete_task_schedule ;; 0) break ;; - *) echo "无效的选择,请重试。" ;; + *) echo "選択が無効です。もう一度お試しください。" ;; esac - read -e -p "按回车键继续..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -6440,7 +6440,7 @@ rsync_manager() { linux_info() { clear - send_stats "系统信息查询" + send_stats "システム情報の問い合わせ" ip_address @@ -6490,41 +6490,41 @@ 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" - 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 @@ -6537,111 +6537,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通信接続ツール" + 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}レンジャーファイル管理ツール" + 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 "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 @@ -6658,7 +6658,7 @@ linux_tools() { clear ranger cd ~ - send_stats "安装ranger" + send_stats "レンジャーをインストールする" ;; 13) clear @@ -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 @@ -6694,7 +6694,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "安装nano" + send_stats "ナノをインストールする" ;; @@ -6705,7 +6705,7 @@ linux_tools() { clear git --help cd ~ - send_stats "安装git" + send_stats "gitをインストールする" ;; 21) @@ -6713,67 +6713,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 "ニンベーダーをインストールする" ;; 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 "インストールされているツール名 (wgetcurlsudohtop) を入力してください:" 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) @@ -6781,7 +6781,7 @@ linux_tools() { ;; *) - echo "无效的输入!" + echo "無効な入力です!" ;; esac break_end @@ -6795,27 +6795,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 "アルパインがBBR3をオープン" ;; 2) sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf @@ -6857,21 +6857,21 @@ docker_ssh_migration() { list_backups() { local BACKUP_ROOT="/tmp" - 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 -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,28 +6892,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}検出されました$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 目录,请手动输入路径: " project_dir + read -e -p "作成ディレクトリが検出されません。パスを手動で入力してください。" 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 @@ -6921,137 +6921,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 復元:$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 -e -p "请输入要还原的备份目录: " BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + send_stats "Docker の復元" + 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 项目 --------- + # --------- 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}Compose 项目 [$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" - 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 @@ -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 @@ -7095,68 +7095,68 @@ 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 "移行するバックアップ ディレクトリを入力してください:" 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" - 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; } + 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}" } # ---------------------------- - # 主菜单 + # メインメニュー # ---------------------------- 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 -e -p "请选择: " choice + read -e -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 @@ -7173,38 +7173,38 @@ linux_docker() { while true; do clear - # send_stats "docker管理" + # 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}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 ;; @@ -7215,22 +7215,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 のバージョン" 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 "" @@ -7245,8 +7245,8 @@ linux_docker() { 5) while true; do clear - send_stats "Docker网络管理" - echo "Docker网络列表" + send_stats "Dockerネットワーク管理" + echo "Dockerネットワークリスト" echo "------------------------------------------------------------" docker network ls echo "" @@ -7270,36 +7270,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 @@ -7308,8 +7308,8 @@ linux_docker() { ;; 4) - send_stats "删除网络" - read -e -p "请输入要删除的网络名: " dockernetwork + send_stats "ネットワークを削除する" + read -e -p "削除するネットワーク名を入力してください:" dockernetwork docker network rm $dockernetwork ;; @@ -7323,29 +7323,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 @@ -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]) @@ -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,13 +7385,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) ;; @@ -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,151 +7462,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}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 三网回程延迟路由测试" - 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 トリプルネットワークバックホール回線テスト" + 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}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}ベンチパフォーマンステスト" + 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 "Yeawu ストリーミング メディアのロック解除の検出" 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 "超高速トリプルネットワーク速度テスト" 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 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 "icu/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 ;; @@ -7616,7 +7616,7 @@ linux_test() { ;; *) - echo "无效的输入!" + echo "無効な入力です!" ;; esac break_end @@ -7632,51 +7632,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}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 "インストールしてもよろしいですか? (はい/いいえ):" 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 "请输入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" \ @@ -7684,14 +7684,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 ;; @@ -7699,20 +7699,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 "続行してもよろしいですか? (はい/いいえ):" 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,28 +7724,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 - 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) @@ -7756,15 +7756,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 +7785,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 +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 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}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 軽量ブログ 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 ブログ サイトをインストールする" + 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 +7872,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 +7898,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 +7934,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 + # AppleCMS webname="苹果CMS" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "インストール$webname" + echo "導入を開始する$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7973,24 +7973,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 +8011,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 "ユーザー名: 管理者" + 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 @@ -8075,12 +8075,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 +8088,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 +8113,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 +8126,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 +8152,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 +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 "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "現在、zip 形式のソース コード パッケージのみをアップロードできます。ソースコードパッケージを/home/web/html/に置いてください。${yuming}ディレクトリの下" + read -e -p "ダウンロード リンクを入力して、ソース コード パッケージをリモートでダウンロードすることもできます。 Enter を直接押して、リモート ダウンロードをスキップします。" url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8193,20 +8193,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 @@ -8217,15 +8217,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 +8235,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 で終わる圧縮パッケージである必要があります。 Pagoda/1panel バックアップ データのインポートをサポートするには、/home/ ディレクトリに配置してください。" + read -e -p "ダウンロード リンクを入力してバックアップ データをリモートでダウンロードすることもできます。 Enter を直接押して、リモート ダウンロードをスキップします。" url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -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 @@ -8278,12 +8278,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 +8296,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 +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" @@ -8332,11 +8332,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 +8356,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 +8379,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 +8397,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 +8431,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 +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 "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "現在、zip 形式のソース コード パッケージのみをアップロードできます。ソースコードパッケージを/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 "请输入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 @@ -8492,23 +8492,23 @@ 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 "バックアップ データをリモート サーバーに転送しますか? (はい/いいえ):" 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 /home/*.tar.gz | head -1) @@ -8516,9 +8516,9 @@ 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 "文件已传送至远程服务器home目录。" + echo "ファイルはリモート サーバーのホーム ディレクトリに転送されました。" else - echo "未找到要传送的文件。" + echo "転送するファイルが見つかりませんでした。" fi break ;; @@ -8526,7 +8526,7 @@ linux_ldnmp() { break ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "選択が無効です。Y または N を入力してください。" ;; esac done @@ -8534,9 +8534,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 @@ -8546,18 +8546,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 ;; *) @@ -8571,19 +8571,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 "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 @@ -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 ;; @@ -8620,11 +8620,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,13 +8644,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 @@ -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/ @@ -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" - 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) (Enter キーを押して最新バージョンを取得します):" version local version=${version:-8.3} cd /home/web/ cp /home/web/docker-compose.yml /home/web/docker-compose1.yml @@ -8709,8 +8709,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 +8721,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 @@ -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]) @@ -8769,7 +8769,7 @@ linux_ldnmp() { ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "選択が無効です。Y または N を入力してください。" ;; esac ;; @@ -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..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8813,71 +8813,71 @@ 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 リモート デスクトップ 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}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}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}メモウェブメモ${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}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}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}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}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主机建站管理面板" - 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}ディープシークチャット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ツールツールボックス" + 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}------------------------" - 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}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个人财务管理工具" - 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}イミッチピクチャービデオマネージャー${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}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}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}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 @@ -9030,8 +9030,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,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "搭建哪吒" + send_stats "ネザを構築する" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,20 +9073,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 "ネザモニタリング$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 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) @@ -9143,7 +9143,7 @@ while true; do ;; 9|mail) - send_stats "搭建邮局" + send_stats "郵便局を建てる" clear install telnet local app_id="9" @@ -9153,44 +9153,44 @@ 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}}' 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 + 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" @@ -9200,7 +9200,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "按任意键继续..." + echo "続行するには任意のキーを押してください..." read -n 1 -s -r -p "" install jq @@ -9219,9 +9219,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 "" @@ -9244,9 +9244,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 "" ;; @@ -9257,7 +9257,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "アプリがアンインストールされました" ;; *) @@ -9291,7 +9291,7 @@ while true; do clear ip_address - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -9301,7 +9301,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 } @@ -9311,7 +9311,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "应用已卸载" + echo "アプリがアンインストールされました" } docker_app_plus @@ -9395,7 +9395,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -9409,7 +9409,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 @@ -9554,7 +9554,7 @@ while true; do ;; 19|safeline) - send_stats "搭建雷池" + send_stats "雷のプールを作る" local app_id="19" local docker_name=safeline-mgt @@ -9562,20 +9562,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 "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 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) @@ -9585,7 +9585,7 @@ while true; do add_app_id clear - echo "雷池WAF面板已经安装完成" + echo "Leichi WAFパネルを導入しました" check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9598,7 +9598,7 @@ while true; do add_app_id clear - echo "雷池WAF面板已经更新完成" + echo "Leichi WAF パネルが更新されました" check_docker_app_ip ;; 3) @@ -9609,7 +9609,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" ;; *) @@ -9728,8 +9728,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 \ @@ -10017,7 +10017,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" @@ -10070,7 +10070,7 @@ while true; do ;; 38|xiaoya) - send_stats "小雅全家桶" + send_stats "シャオヤファミリーバケツ" clear install_docker check_disk_space 1 @@ -10274,9 +10274,9 @@ while true; do prometheus_install clear ip_address - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip - echo "初始用户名密码均为: admin" + echo "初期のユーザー名とパスワードは次のとおりです: admin" } docker_app_update() { @@ -10294,7 +10294,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "应用已卸载" + echo "アプリがアンインストールされました" } docker_app_plus @@ -10381,7 +10381,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 ;; @@ -10501,7 +10501,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -10516,7 +10516,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 @@ -10544,7 +10544,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -10559,7 +10559,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -10567,7 +10567,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 @@ -10588,17 +10588,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 "アプリが更新されました" } @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "应用已卸载" + echo "アプリがアンインストールされました" } docker_app_plus @@ -10655,7 +10655,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 } @@ -10671,7 +10671,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 @@ -10933,7 +10933,7 @@ while true; do docker_rum() { - read -e -p "设置LibreTV的登录密码: " app_passwd + read -e -p "LibreTV のログイン パスワードを設定します。" app_passwd docker run -d \ --name libretv \ @@ -10967,9 +10967,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 @@ -10985,7 +10985,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -10999,7 +10999,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 @@ -11072,8 +11072,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 \ @@ -11170,11 +11170,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) @@ -11183,17 +11183,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 } @@ -11203,7 +11203,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11288,7 +11288,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 \ @@ -11392,7 +11392,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -11405,7 +11405,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 @@ -11566,7 +11566,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 @@ -11618,7 +11618,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -11632,7 +11632,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 @@ -11707,8 +11707,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} \ @@ -11756,7 +11756,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -11770,7 +11770,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 @@ -11810,7 +11810,7 @@ while true; do block_container_port "$docker_name" "$ipv4_address" clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -11824,7 +11824,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 @@ -11842,9 +11842,9 @@ 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 + read -e -p "WireGuard ネットワーク セグメントを入力してください (デフォルトは 10.13.13.0)。" NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11914,18 +11914,18 @@ while true; do sleep 2 echo - echo -e "${gl_huang}所有客户端二维码配置: ${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的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 をダウンロードし、上の 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 } @@ -11953,16 +11953,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 - # 逐行读取用户输入 + # ユーザー入力を 1 行ずつ読み取ります while IFS= read -r line; do if [[ -z "$line" ]]; then ((empty_line_count++)) @@ -11975,10 +11975,10 @@ while true; do fi done - # 写入配置文件 + # 設定ファイルの書き込み echo "$input" > "$CONFIG_FILE" - echo "客户端配置已保存到 $CONFIG_FILE" + echo "クライアント設定の保存場所$CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12023,10 +12023,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 @@ -12043,7 +12043,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "インストール完了" check_docker_app_ip } @@ -12057,7 +12057,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 @@ -12097,24 +12097,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" - read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice + echo "バックアップファイルが作成されました: /$backup_filename" + read -e -p "バックアップ データをリモート サーバーに転送しますか? (はい/いいえ):" 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) @@ -12122,14 +12122,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项目,不包含宝塔,1panel等建站面板的数据备份。" + echo "注: 現在のバックアップには Docker プロジェクトのみが含まれており、Pagoda や 1panel などの Web サイト構築パネルのデータ バックアップは含まれていません。" break ;; esac @@ -12139,29 +12139,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 "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 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 ;; @@ -12184,35 +12184,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}ワークスペース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" + 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 @@ -12220,7 +12220,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "启动工作区$SESSION_NAME" + send_stats "ワークスペースの開始$SESSION_NAME" tmux_run ;; @@ -12228,63 +12228,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 ;; @@ -12296,21 +12296,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 ;; @@ -12326,29 +12326,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 @@ -12373,54 +12373,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}ネイティブホスト解像度${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}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}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 + 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 @@ -12428,34 +12428,34 @@ linux_Settings() { 2) clear - send_stats "设置你的登录密码" - echo "设置你的登录密码" + send_stats "ログインパスワードを設定する" + echo "ログインパスワードを設定する" passwd ;; 3) root_use - send_stats "root密码模式" + 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版本号(输入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 @@ -12488,7 +12488,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 @@ -12517,55 +12517,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 @@ -12584,8 +12584,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 @@ -12600,51 +12600,51 @@ 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 "------------------------" 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 "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 优先" + 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修复" + echo "この機能は jhb によって提供されています。ありがとう!" + send_stats "IPv6修復" ;; *) @@ -12662,43 +12662,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 "カスタム仮想メモリセット" ;; *) @@ -12711,8 +12711,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 @@ -12723,62 +12723,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" ;; @@ -12791,50 +12791,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 "" @@ -12842,46 +12842,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 "アジア" echo "1. 中国上海时间 2. 中国香港时间" - echo "3. 日本东京时间 4. 韩国首尔时间" - echo "5. 新加坡时间 6. 印度加尔各答时间" - echo "7. 阿联酋迪拜时间 8. 澳大利亚悉尼时间" - echo "9. 泰国曼谷时间" + 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 @@ -12924,21 +12924,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 @@ -12956,11 +12956,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 @@ -12968,32 +12968,32 @@ EOF 19) root_use - send_stats "换系统更新源" + send_stats "システムアップデートソースを変更する" clear - echo "选择更新源区域" - echo "接入LinuxMirrors切换系统更新源" + echo "更新元リージョンの選択" + echo "LinuxMirror にアクセスしてシステム アップデート ソースを切り替える" 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 @@ -13001,62 +13001,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 # 跳出循环,退出菜单 @@ -13068,32 +13068,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 # 跳出循环,退出菜单 @@ -13104,24 +13104,24 @@ EOF 22) root_use - send_stats "ssh防御" + 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 -e "SSH防御プログラム$check_f2b_status" + echo "failed2ban はブルート フォース クラッキングを防ぐ 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) f2b_install_sshd @@ -13143,7 +13143,7 @@ EOF 9) remove fail2ban rm -rf /etc/fail2ban - echo "Fail2Ban防御程序已卸载" + echo "Fail2Ban 防御プログラムがアンインストールされました" break ;; *) @@ -13156,47 +13156,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 的值 + # しきい値_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 ~ @@ -13209,15 +13209,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 @@ -13230,40 +13230,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 @@ -13279,18 +13279,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 "続行してもよろしいですか? (はい/いいえ):" choice case "$choice" in [Yy]) - send_stats "电报预警启用" + send_stats "テレグラム警告が有効になっています" cd ~ install nano tmux bc jq check_crontab_installed @@ -13312,7 +13312,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 @@ -13323,21 +13323,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 @@ -13381,7 +13381,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; } @@ -13404,62 +13404,62 @@ EOF 41) clear - send_stats "留言板" - echo "访问科技lion官方留言板,您对脚本有任何想法欢迎留言交流!" + send_stats "掲示板" + echo "Technology Lion の公式掲示板をご覧ください。脚本についてのアイデアがあれば、メッセージを残して交換してください。" echo "https://board.kejilion.pro" - echo "公共密码: kejilion.sh" + echo "公開パスワード: kejilion.sh" ;; 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 "ワンクリックメンテナンスを実行してもよろしいですか? (はい/いいえ):" 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) @@ -13476,25 +13476,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 @@ -13502,7 +13502,7 @@ EOF 99) clear - send_stats "重启系统" + send_stats "システムを再起動します" server_reboot ;; 100) @@ -13518,32 +13518,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 @@ -13559,11 +13559,11 @@ EOF 102) clear - send_stats "卸载科技lion脚本" - echo "卸载科技lion脚本" + 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]) @@ -13571,16 +13571,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 ;; @@ -13590,7 +13590,7 @@ EOF ;; *) - echo "无效的输入!" + echo "無効な入力です!" ;; esac break_end @@ -13608,187 +13608,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. ファイル ディレクトリの解凍 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 "リモート サーバーのユーザー名 (デフォルトの 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 @@ -14086,15 +14086,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 ;; *) @@ -14116,41 +14116,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スクリプト・コレクション" +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}Eudemons Parlu サーバー開始スクリプト" 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_info ;; - 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 ;; @@ -14161,13 +14161,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "幻兽帕鲁开服脚本" ; 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 @@ -14175,70 +14175,70 @@ 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" -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 "显示系统信息 k info" +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 "クリーン系ジャンククリーン |きれいだ" +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 "rsync リモート同期ツール k rsync | k リモート同期" +echo "ハードディスク管理ツール k ディスク | k ハードディスクの管理" +echo "イントラネット普及率 (サーバー) k frps" +echo "イントラネット浸透率 (クライアント) k frpc" +echo "ソフトウェア起動 k start sshd | 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 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 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 ロード バランシング |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 お気に入り | k コマンドのお気に入り" +echo "アプリケーションマーケット管理kアプリ" +echo "申請番号の迅速な管理 k app 26 | kアプリ1パネル | k アプリ npm" +echo "システム情報を表示 k info" } 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|更新) @@ -14272,7 +14272,7 @@ else rsync_run) shift - send_stats "定时rsync同步" + send_stats "スケジュールされたrsync同期" run_task "$@" ;; @@ -14291,7 +14291,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" @@ -14304,13 +14304,13 @@ else swap) shift - send_stats "快速设置虚拟内存" + send_stats "仮想メモリをすばやくセットアップする" add_swap "$@" ;; time|时区) shift - send_stats "快速设置时区" + send_stats "タイムゾーンを素早く設定" set_timedate "$@" ;; @@ -14358,42 +14358,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 @@ -14403,15 +14403,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 ;; *) @@ -14438,7 +14438,7 @@ else app) shift - send_stats "应用$@" + send_stats "申し込む$@" linux_panel "$@" ;; diff --git a/kr/kejilion.sh b/kr/kejilion.sh index 8a6ae43df..37ec316ab 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1122,14 +1122,14 @@ iptables_panel() { 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. 특정 국가 IP 차단 16. 특정 국가 IP만 허용" - echo "17. 지정된 국가의 IP 제한을 해제합니다." + echo "17. 지정된 국가에서 IP 제한을 해제합니다." echo "------------------------" echo "0. 이전 메뉴로 돌아가기" echo "------------------------" @@ -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" ;; @@ -1291,7 +1291,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 가상 메모리를 만들어야 하는지 확인 +# 가상 메모리를 생성해야 하는지 결정 [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -2112,7 +2112,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}" @@ -2656,7 +2656,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 @@ -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 @@ -3185,16 +3185,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" } @@ -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 @@ -3620,7 +3620,7 @@ EOF donlond_frp frps - # 생성된 정보 출력 + # 생성된 정보를 출력 ip_address echo "------------------------" echo "클라이언트 배포에 필요한 매개변수" @@ -3682,7 +3682,7 @@ remote_port = ${remote_port} EOF - # 생성된 정보 출력 + # 생성된 정보를 출력 echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." docker restart frpc @@ -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" ;; @@ -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 ;; @@ -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 @@ -5038,7 +5038,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 @@ -5056,7 +5056,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 @@ -5847,7 +5847,7 @@ add_connection() { 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" @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "하드디스크 관리 기능" while true; do clear - echo "하드 드라이브 파티션 관리" + echo "하드 디스크 파티션 관리" echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions @@ -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" @@ -6326,7 +6326,7 @@ run_task() { else echo "동기화에 실패했습니다! 다음 사항을 확인하세요." echo "1. 네트워크 연결이 정상인가요?" - echo "2. 원격 호스트에 접근할 수 있나요?" + echo "2. 원격 호스트에 접근 가능한지 여부" echo "3. 인증정보가 정확합니까?" echo "4. 로컬 및 원격 디렉터리에 올바른 액세스 권한이 있습니까?" fi @@ -6694,7 +6694,7 @@ linux_tools() { clear nano -h cd ~ - send_stats "安装nano" + send_stats "나노 설치" ;; @@ -6713,7 +6713,7 @@ linux_tools() { install cmatrix clear cmatrix - send_stats "安装cmatrix" + send_stats "cmatrix 설치" ;; 22) clear @@ -6746,34 +6746,34 @@ 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 ;; 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 컬 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) @@ -6781,7 +6781,7 @@ linux_tools() { ;; *) - echo "无效的输入!" + echo "입력이 잘못되었습니다!" ;; esac break_end @@ -6795,27 +6795,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 @@ -6857,21 +6857,21 @@ docker_ssh_migration() { list_backups() { local BACKUP_ROOT="/tmp" - 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 -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,28 +6892,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도커 작성 컨테이너입니다${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 项目已经打包过,跳过 + # Compose 프로젝트가 이미 패키징된 경우 건너뛰세요. if [[ -n "${PACKED_COMPOSE_PATHS[$project_dir]}" ]]; then - echo -e "${YELLOW}Compose 项目 [$project_name] 已备份过,跳过重复打包...${NC}" + echo -e "${YELLOW}프로젝트 작성 [$project_name] 이미 백업되어 있으니 반복 패키징은 생략하세요...${NC}" continue fi @@ -6921,137 +6921,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 복원:$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 -e -p "请输入要还原的备份目录: " BACKUP_DIR - [[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}备份目录不存在${NC}"; return; } + send_stats "도커 복원" + 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 项目 --------- + # --------- 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 项目的容器是否已经在运行 + # 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 -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" - 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 @@ -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 @@ -7095,68 +7095,68 @@ docker_ssh_migration() { # ---------------------------- - # 迁移 + # 이주하다 # ---------------------------- migrate_docker() { - send_stats "Docker迁移" + send_stats "도커 마이그레이션" 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 - 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" - 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; } + 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}" } # ---------------------------- - # 主菜单 + # 메인 메뉴 # ---------------------------- 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. 도커 프로젝트 백업" + echo -e "2. 도커 프로젝트 마이그레이션" + 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 ;; 3) restore_docker ;; 4) delete_backup ;; 0) return ;; - *) echo -e "${RED}无效选项${NC}" ;; + *) echo -e "${RED}잘못된 옵션${NC}" ;; esac break_end done @@ -7173,38 +7173,38 @@ linux_docker() { while true; do clear - # send_stats "docker管理" - echo -e "Docker管理" + # 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全局状态 ${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}도커 컨테이너 관리${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 "도커 환경 설치" install_add_docker ;; @@ -7215,22 +7215,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 "Docker 볼륨:${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 "" @@ -7245,8 +7245,8 @@ linux_docker() { 5) while true; do clear - send_stats "Docker网络管理" - echo "Docker网络列表" + send_stats "도커 네트워크 관리" + echo "도커 네트워크 목록" echo "------------------------------------------------------------" docker network ls echo "" @@ -7270,36 +7270,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 @@ -7308,8 +7308,8 @@ linux_docker() { ;; 4) - send_stats "删除网络" - read -e -p "请输入要删除的网络名: " dockernetwork + send_stats "네트워크 삭제" + read -e -p "삭제할 네트워크 이름을 입력하세요:" dockernetwork docker network rm $dockernetwork ;; @@ -7323,29 +7323,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 @@ -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]) @@ -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 "도커 정리" read -e -p "$(echo -e "${gl_huang}提示: ${gl_bai}将清理无用的镜像容器网络,包括停止的容器,确定清理吗?(Y/N): ")" choice case "$choice" in [Yy]) @@ -7385,13 +7385,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) ;; @@ -7407,13 +7407,13 @@ linux_docker() { 11) clear - send_stats "Docker v6 开" + send_stats "도커 v6 켜짐" docker_ipv6_on ;; 12) clear - send_stats "Docker v6 关" + send_stats "도커 v6 닫기" docker_ipv6_off ;; @@ -7424,7 +7424,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]) @@ -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,151 +7462,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}예우 스트리밍 미디어 잠금 해제 감지" + 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 삼중 네트워크 백홀 회선 테스트" + 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 세 개의 네트워크 라인 테스트" + 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}벤치 성능 테스트" + 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 "예우 스트리밍 미디어 잠금 해제 감지" 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 "초고속 트리플 네트워크 속도 테스트" 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 "벤치 성능 테스트" 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 @@ -7632,51 +7632,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}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 "정말로 설치하시겠습니까? (예/아니요):" 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 "请输入Speedtest间隔时间(秒) [默认: $DEFAULT_SPEEDTEST_INTERVAL]: " speedtest_interval + read -e -p "속도 테스트 간격 시간(초)을 입력하십시오. [기본값:$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" \ @@ -7684,14 +7684,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 ;; @@ -7699,20 +7699,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 "계속하시겠습니까? (예/아니요):" 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) @@ -7724,28 +7724,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 - 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) @@ -7756,15 +7756,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 +7785,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 +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}安装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}워드프레스 설치${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 포럼 웹사이트 설치${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 +7872,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 +7898,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 +7934,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 "레디스 호스트: 레디스" ;; 5) clear - # 苹果CMS + # AppleCMS webname="苹果CMS" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포 시작$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -7973,24 +7973,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 +8011,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 "레디스 주소 : 레디스" + echo "redis 비밀번호: 기본적으로 입력되지 않음" + echo "레디스 포트: 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论坛 + # 플라럼 포럼 webname="flarum论坛" - send_stats "安装$webname" - echo "开始部署 $webname" + send_stats "설치하다$webname" + echo "배포 시작$webname" add_yuming repeat_add_yuming ldnmp_install_status @@ -8075,12 +8075,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 +8088,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 +8113,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 +8126,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 +8152,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 +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 "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "현재는 zip 형식의 소스 코드 패키지만 업로드할 수 있습니다. 소스 코드 패키지를 /home/web/html/에 넣어주세요.${yuming}디렉토리 아래" + read -e -p "다운로드 링크를 입력하여 소스 코드 패키지를 원격으로 다운로드할 수도 있습니다. 원격 다운로드를 건너뛰려면 Enter를 직접 누르세요." url_download if [ -n "$url_download" ]; then wget "$url_download" @@ -8193,20 +8193,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 @@ -8217,15 +8217,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 +8235,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로 끝나는 압축 패키지여야 합니다. Pagoda/1panel 백업 데이터 가져오기를 지원하려면 /home/ 디렉토리에 넣으십시오." + read -e -p "다운로드 링크를 입력하여 원격으로 백업 데이터를 다운로드할 수도 있습니다. 원격 다운로드를 건너뛰려면 Enter를 직접 누르세요." url_download_db cd /home/ if [ -n "$url_download_db" ]; then @@ -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 @@ -8278,12 +8278,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 +8296,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 +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" @@ -8332,11 +8332,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 +8356,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 +8379,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 +8397,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 +8431,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 +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 "也可以输入下载链接,远程下载源码包,直接回车将跳过远程下载: " url_download + echo "현재는 zip 형식의 소스 코드 패키지만 업로드할 수 있습니다. 소스 코드 패키지를 /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 "请输入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 @@ -8492,23 +8492,23 @@ 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 "백업 데이터를 원격 서버로 전송하시겠습니까? (예/아니요):" 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 /home/*.tar.gz | head -1) @@ -8516,9 +8516,9 @@ 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 "文件已传送至远程服务器home目录。" + echo "파일이 원격 서버 홈 디렉터리로 전송되었습니다." else - echo "未找到要传送的文件。" + echo "전송할 파일을 찾을 수 없습니다." fi break ;; @@ -8526,7 +8526,7 @@ linux_ldnmp() { break ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac done @@ -8534,9 +8534,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 @@ -8546,18 +8546,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 ;; *) @@ -8571,19 +8571,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 "최신 백업을 복원하려면 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 @@ -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 ;; @@ -8620,11 +8620,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,13 +8644,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 @@ -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/ @@ -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" - 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)(최신 버전을 얻으려면 Enter 키를 누르세요):" version local version=${version:-8.3} cd /home/web/ cp /home/web/docker-compose.yml /home/web/docker-compose1.yml @@ -8709,8 +8709,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 +8721,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 @@ -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]) @@ -8769,7 +8769,7 @@ linux_ldnmp() { ;; *) - echo "无效的选择,请输入 Y 或 N。" + echo "선택이 잘못되었습니다. Y 또는 N을 입력하세요." ;; esac ;; @@ -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..100}; do if echo "$app_numbers" | grep -q "^$i$"; then declare "color$i=${gl_lv}" @@ -8813,71 +8813,71 @@ 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 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}禅道项目管理软件 ${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}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}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}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 패널 탐색 패널${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}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}도커 가속 스테이션${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}라마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}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}비트워든 비밀번호 관리자${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}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}코마리 서버 모니터링 도구${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}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}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}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 @@ -9030,8 +9030,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,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "搭建哪吒" + send_stats "네자 빌드" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,20 +9073,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 "네자 모니터링$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 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) @@ -9143,7 +9143,7 @@ while true; do ;; 9|mail) - send_stats "搭建邮局" + send_stats "우체국을 짓다" clear install telnet local app_id="9" @@ -9153,44 +9153,44 @@ 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}}' 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 + 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" @@ -9200,7 +9200,7 @@ while true; do echo "TXT ? ?" echo "" echo "------------------------" - echo "按任意键继续..." + echo "계속하려면 아무 키나 누르세요..." read -n 1 -s -r -p "" install jq @@ -9219,9 +9219,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 "" @@ -9244,9 +9244,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 "" ;; @@ -9257,7 +9257,7 @@ while true; do rm -rf /home/docker/mail sed -i "/\b${app_id}\b/d" /home/docker/appno.txt - echo "应用已卸载" + echo "앱이 제거되었습니다." ;; *) @@ -9291,7 +9291,7 @@ while true; do clear ip_address - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -9301,7 +9301,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 } @@ -9311,7 +9311,7 @@ while true; do docker rm -f db docker rmi -f mongo:latest rm -rf /home/docker/mongo - echo "应用已卸载" + echo "앱이 제거되었습니다." } docker_app_plus @@ -9395,7 +9395,7 @@ while true; do cd /home/docker/cloud/ docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -9409,7 +9409,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 @@ -9554,7 +9554,7 @@ while true; do ;; 19|safeline) - send_stats "搭建雷池" + send_stats "천둥 웅덩이를 만들어라" local app_id="19" local docker_name=safeline-mgt @@ -9562,20 +9562,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 "레이치(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 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) @@ -9585,7 +9585,7 @@ while true; do add_app_id clear - echo "雷池WAF面板已经安装完成" + echo "Leichi WAF 패널이 설치되었습니다." check_docker_app_ip docker exec safeline-mgt resetadmin @@ -9598,7 +9598,7 @@ while true; do add_app_id clear - echo "雷池WAF面板已经更新完成" + echo "Leichi WAF 패널이 업데이트되었습니다." check_docker_app_ip ;; 3) @@ -9609,7 +9609,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" ;; *) @@ -9728,8 +9728,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 \ @@ -10017,7 +10017,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" @@ -10070,7 +10070,7 @@ while true; do ;; 38|xiaoya) - send_stats "小雅全家桶" + send_stats "Xiaoya 가족 버킷" clear install_docker check_disk_space 1 @@ -10274,9 +10274,9 @@ while true; do prometheus_install clear ip_address - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip - echo "初始用户名密码均为: admin" + echo "초기 사용자 이름과 비밀번호는 admin입니다." } docker_app_update() { @@ -10294,7 +10294,7 @@ while true; do docker rmi -f grafana/grafana:latest rm -rf /home/docker/monitoring - echo "应用已卸载" + echo "앱이 제거되었습니다." } docker_app_plus @@ -10381,7 +10381,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 ;; @@ -10501,7 +10501,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -10516,7 +10516,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 @@ -10544,7 +10544,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -10559,7 +10559,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -10567,7 +10567,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 @@ -10588,17 +10588,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 "앱이 업데이트되었습니다" } @@ -10608,7 +10608,7 @@ while true; do cd /opt rm -rf jumpserver-installer*/ rm -rf jumpserver - echo "应用已卸载" + echo "앱이 제거되었습니다." } docker_app_plus @@ -10655,7 +10655,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 } @@ -10671,7 +10671,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 @@ -10933,7 +10933,7 @@ while true; do docker_rum() { - read -e -p "设置LibreTV的登录密码: " app_passwd + read -e -p "LibreTV 로그인 비밀번호 설정:" app_passwd docker run -d \ --name libretv \ @@ -10967,9 +10967,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 @@ -10985,7 +10985,7 @@ while true; do cd /home/docker/moontv/ docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -10999,7 +10999,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 @@ -11072,8 +11072,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 \ @@ -11170,11 +11170,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) @@ -11183,17 +11183,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 } @@ -11203,7 +11203,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 @@ -11220,7 +11220,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 @@ -11270,7 +11270,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 @@ -11288,7 +11288,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 \ @@ -11392,7 +11392,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -11405,7 +11405,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 @@ -11566,7 +11566,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 @@ -11618,7 +11618,7 @@ while true; do cd /home/docker/gitea/ docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -11632,7 +11632,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 @@ -11707,8 +11707,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} \ @@ -11756,7 +11756,7 @@ while true; do cd /home/docker/paperless docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -11770,7 +11770,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 @@ -11810,7 +11810,7 @@ while true; do block_container_port "$docker_name" "$ipv4_address" clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -11824,7 +11824,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 @@ -11842,9 +11842,9 @@ 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 + read -e -p "WireGuard 네트워크 세그먼트(기본값 10.13.13.0)를 입력하세요." NETWORK NETWORK=${NETWORK:-10.13.13.0} PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,) @@ -11914,18 +11914,18 @@ while true; do sleep 2 echo - echo -e "${gl_huang}所有客户端二维码配置: ${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的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을 다운로드하고 위의 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 } @@ -11953,16 +11953,16 @@ while true; do local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf" - # 创建目录(如果不存在) + # 디렉터리가 없으면 생성 mkdir -p "$(dirname "$CONFIG_FILE")" - echo "请粘贴你的客户端配置,连续按两次回车保存:" + echo "클라이언트 구성을 붙여넣고 Enter를 두 번 눌러 저장하세요." - # 初始化变量 + # 변수 초기화 input="" empty_line_count=0 - # 逐行读取用户输入 + # 사용자 입력을 한 줄씩 읽습니다. while IFS= read -r line; do if [[ -z "$line" ]]; then ((empty_line_count++)) @@ -11975,10 +11975,10 @@ while true; do fi done - # 写入配置文件 + # 구성 파일 쓰기 echo "$input" > "$CONFIG_FILE" - echo "客户端配置已保存到 $CONFIG_FILE" + echo "클라이언트 구성이 다음에 저장되었습니다.$CONFIG_FILE" ip link delete wg0 &>/dev/null @@ -12023,10 +12023,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 @@ -12043,7 +12043,7 @@ while true; do docker compose up -d clear - echo "已经安装完成" + echo "설치 완료" check_docker_app_ip } @@ -12057,7 +12057,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 @@ -12097,24 +12097,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" - read -e -p "要传送备份数据到远程服务器吗?(Y/N): " choice + echo "생성된 백업 파일: /$backup_filename" + read -e -p "백업 데이터를 원격 서버로 전송하시겠습니까? (예/아니요):" 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) @@ -12122,14 +12122,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项目,不包含宝塔,1panel等建站面板的数据备份。" + echo "참고: 현재 백업에는 docker 프로젝트만 포함되며, Pagoda, 1panel 등 웹사이트 구축 패널의 데이터 백업은 포함되지 않습니다." break ;; esac @@ -12139,29 +12139,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 "최신 백업을 복원하려면 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 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 ;; @@ -12184,35 +12184,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 @@ -12220,7 +12220,7 @@ linux_work() { clear install tmux local SESSION_NAME="work1" - send_stats "启动工作区$SESSION_NAME" + send_stats "작업공간 시작$SESSION_NAME" tmux_run ;; @@ -12228,63 +12228,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 ;; @@ -12296,21 +12296,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 ;; @@ -12326,29 +12326,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 "다음과 같이 백그라운드에서 실행하려는 명령을 입력하십시오. 컬 -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 @@ -12373,54 +12373,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}기본 호스트 확인${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}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 @@ -12428,34 +12428,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 "현재 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 @@ -12488,7 +12488,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 @@ -12517,55 +12517,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 @@ -12584,8 +12584,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 @@ -12600,51 +12600,51 @@ 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 "------------------------" 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 "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 优先" + 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修复" + echo "이 기능은 jhb에서 제공합니다. 감사합니다!" + send_stats "IPv6 수리" ;; *) @@ -12662,43 +12662,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 "사용자 정의 가상 메모리 세트" ;; *) @@ -12711,8 +12711,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 @@ -12723,62 +12723,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" ;; @@ -12791,50 +12791,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 "" @@ -12842,46 +12842,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. 미국 서부 시간 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 @@ -12924,21 +12924,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 @@ -12956,11 +12956,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 @@ -12968,32 +12968,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 @@ -13001,62 +13001,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 # 跳出循环,退出菜单 @@ -13068,32 +13068,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 # 跳出循环,退出菜单 @@ -13104,24 +13104,24 @@ EOF 22) root_use - send_stats "ssh防御" + 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 -e "SSH 방어 프로그램$check_f2b_status" + echo "fall2ban은 무차별 대입 크래킹을 방지하는 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) f2b_install_sshd @@ -13143,7 +13143,7 @@ EOF 9) remove fail2ban rm -rf /etc/fail2ban - echo "Fail2Ban防御程序已卸载" + echo "Fail2Ban 방어 프로그램이 제거되었습니다." break ;; *) @@ -13156,47 +13156,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 ~ @@ -13209,15 +13209,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 @@ -13230,40 +13230,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 @@ -13279,18 +13279,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 로봇 API 및 사용자 ID를 구성해야 합니다." + 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 @@ -13312,7 +13312,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 @@ -13323,21 +13323,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 @@ -13381,7 +13381,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; } @@ -13404,62 +13404,62 @@ EOF 41) clear - send_stats "留言板" - echo "访问科技lion官方留言板,您对脚本有任何想法欢迎留言交流!" + send_stats "메시지 보드" + echo "Technology Lion 공식 게시판을 방문해 보세요. 스크립트에 대한 아이디어가 있으시면 교환 메시지를 남겨주세요!" echo "https://board.kejilion.pro" - echo "公共密码: kejilion.sh" + echo "공개 비밀번호: kejilion.sh" ;; 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 "원클릭 유지 관리를 원하시나요? (예/아니요):" 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) @@ -13476,25 +13476,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 @@ -13502,7 +13502,7 @@ EOF 99) clear - send_stats "重启系统" + send_stats "시스템을 다시 시작하세요" server_reboot ;; 100) @@ -13518,32 +13518,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 @@ -13559,11 +13559,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 "계속하시겠습니까? (예/아니요):" choice case "$choice" in [Yy]) @@ -13571,16 +13571,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 ;; @@ -13590,7 +13590,7 @@ EOF ;; *) - echo "无效的输入!" + echo "입력이 잘못되었습니다!" ;; esac break_end @@ -13608,187 +13608,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. 파일 디렉터리 압축 풀기 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 @@ -14086,15 +14086,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 ;; *) @@ -14116,41 +14116,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}Eudemons Parlu 서버 오픈 스크립트" 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_info ;; - 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 ;; @@ -14161,13 +14161,13 @@ case $choice in 13) linux_Settings ;; 14) linux_cluster ;; 15) kejilion_Affiliates ;; - p) send_stats "幻兽帕鲁开服脚本" ; 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 @@ -14175,70 +14175,70 @@ 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" -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 "显示系统信息 k info" +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 제거 nano wget | k 델 나노 wget | k 나노 wget 제거 | k 나노 wget 제거" +echo "시스템 k 업데이트 업데이트 | 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 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 "도커 관리 플레인 k 도커" +echo "docker 환경 설치 k docker 설치 |k docker 설치" +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 "역방향 프록시 설치 k fd |k rp |k 역방향 프록시 |k fd xxx.com" +echo "로드 밸런싱 설치 k loadbalance |k 로드 밸런싱" +echo "방화벽 패널 k fhq |k 방화벽" +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 26 | k 앱 1패널 | k 앱 npm" +echo "시스템 정보 표시 k 정보" } 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|更新) @@ -14272,7 +14272,7 @@ else rsync_run) shift - send_stats "定时rsync同步" + send_stats "예약된 rsync 동기화" run_task "$@" ;; @@ -14291,7 +14291,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" @@ -14304,13 +14304,13 @@ else swap) shift - send_stats "快速设置虚拟内存" + send_stats "가상 메모리를 빠르게 설정하세요" add_swap "$@" ;; time|时区) shift - send_stats "快速设置时区" + send_stats "시간대를 빠르게 설정" set_timedate "$@" ;; @@ -14358,42 +14358,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 @@ -14403,15 +14403,15 @@ else shift case $1 in install|安装) - send_stats "快捷安装docker" + send_stats "도커를 빠르게 설치하세요" install_docker ;; ps|容器) - send_stats "快捷容器管理" + send_stats "빠른 컨테이너 관리" docker_ps ;; img|镜像) - send_stats "快捷镜像管理" + send_stats "빠른 이미지 관리" docker_image ;; *) @@ -14438,7 +14438,7 @@ else app) shift - send_stats "应用$@" + send_stats "신청$@" linux_panel "$@" ;; diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 99c11b586..11c99af6d 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -8576,7 +8576,7 @@ linux_ldnmp() { 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 @@ -12144,7 +12144,7 @@ while true; do 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 @@ -13283,7 +13283,7 @@ EOF echo "TG-bot監控預警功能" echo "影片介紹: https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" - echo "您需要設定tg機器人API和接收預警的用戶ID,即可實現本機CPU,內存,硬碟,流量,SSH登入的即時監控預警" + echo "您需要設定tg機器人API和接收預警的使用者ID,即可實現本機CPU,內存,硬碟,流量,SSH登入的即時監控預警" echo "到達閾值後會向用戶發送預警訊息" echo -e "${gl_hui}-關於流量,重啟伺服器將重新計算-${gl_bai}" read -e -p "確定繼續嗎? (Y/N):" choice @@ -14065,7 +14065,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}腳本已更新到最新版本!${gl_huang}v$sh_v_new${gl_bai}" send_stats "腳本已經最新$sh_v_new" break_end ~/kejilion.sh From b4cbd3fefe1631e87a4ed5d44b2fe9aedc53d715 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 26 Apr 2026 06:13:11 +0000 Subject: [PATCH 30/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202026-04-26=2006:13:11?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 52 ++++++++++++++++---------------- jp/kejilion.sh | 82 +++++++++++++++++++++++++------------------------- kr/kejilion.sh | 70 +++++++++++++++++++++--------------------- tw/kejilion.sh | 28 ++++++++--------- 4 files changed, 116 insertions(+), 116 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 9a13e943d..040743676 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -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 setup is completed!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is complete!${gl_bai}" } @@ -7479,7 +7479,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}------------------------" @@ -8815,7 +8815,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}------------------------" @@ -8835,37 +8835,37 @@ while true; do 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}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}Nexterm remote connection tool" + echo -e "${gl_kjlan}41. ${color41}Mouse management panel${gl_kjlan}42. ${color42}Nexterm远程连接工具" 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}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}53. ${color53}llama3 chat AI large model${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 large model knowledge base${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 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}61. ${color61}Online translation server${gl_kjlan}62. ${color62}RAGFlow大模型知识库" + echo -e "${gl_kjlan}63. ${color63}OpenWebUI自托管AI平台 ${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools toolbox" + echo -e "${gl_kjlan}65. ${color65}n8n自动化工作流平台 ${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp video download tool" + 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 file transfer tool${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}71. ${color71}Navidrome私有音乐服务器 ${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}77. ${color77}Thunder offline download tool${gl_kjlan}78. ${color78}PandaWiki智能文档管理系统" 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 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}81. ${color81}JitsiMeet video conference${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 is a great tool for watching movies together${gl_kjlan}88. ${color88}Owncast自托管直播平台" + echo -e "${gl_kjlan}89. ${color89}FileCodeBox file express${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}93. ${color93}Dufs minimalist static file server${gl_kjlan}94. ${color94}Gopeed high-speed download tool" @@ -9153,7 +9153,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" @@ -12140,7 +12140,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 "" @@ -13728,7 +13728,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 @@ -14043,7 +14043,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}自动更新已开启,每天凌晨2点脚本会自动更新!${gl_bai}" fi echo "------------------------" @@ -14175,7 +14175,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 3613bed36..b7b7b31e4 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -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 @@ -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 @@ -953,12 +953,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 +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" ;; @@ -1523,7 +1523,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 が開いているかどうかを確認し、アクセス可能であることを確認します。" @@ -1660,7 +1660,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 @@ -1865,7 +1865,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 +1996,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 "------------------------" @@ -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" @@ -2231,7 +2231,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 +2439,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) @@ -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" ;; @@ -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 \ @@ -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ログインの設定が完了しました!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定は完了です!${gl_bai}" } @@ -4722,7 +4722,7 @@ dd_xitong() { ;; 30) - send_stats "centos9を再インストールする" + send_stats "CentOS9を再インストールする" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -5364,11 +5364,11 @@ Kernel_optimize() { echo -e "${gl_huang}ヒント:${gl_bai}本番環境では注意して使用してください。" echo "--------------------" echo "1. ハイパフォーマンス最適化モード: システムのパフォーマンスを最大化し、ファイル記述子、仮想メモリ、ネットワーク設定、キャッシュ管理、CPU 設定を最適化します。" - echo "2. バランスのとれた最適化モード: パフォーマンスとリソース消費のバランスをとり、日常の使用に適しています。" + echo "2. 均衡优化模式: 在性能与资源消耗之间取得平衡,适合日常使用。" echo "3. Web サイト最適化モード: Web サイトサーバーを最適化して、同時接続処理能力、応答速度、全体的なパフォーマンスを向上させます。" - echo "4. ライブ ブロードキャスト最適化モード: ライブ ストリーミングの特別なニーズを最適化し、遅延を削減し、送信パフォーマンスを向上させます。" - echo "5. ゲームサーバー最適化モード: ゲームサーバーを最適化して、同時処理能力と応答速度を向上させます。" - echo "6. デフォルト設定の復元: システム設定をデフォルト構成に復元します。" + echo "4. 直播优化模式: 针对直播推流的特殊需求进行优化,减少延迟,提高传输性能。" + echo "5. 游戏服优化模式: 针对游戏服务器进行优化,提高并发处理能力和响应速度。" + echo "6. 还原默认设置: 将系统设置还原为默认配置。" echo "--------------------" echo "0. 前のメニューに戻る" echo "--------------------" @@ -5472,7 +5472,7 @@ while true; do clear echo "現在のシステム言語:$LANG" echo "------------------------" - echo "1. 英語 2. 簡体字中国語 3. 繁体字中国語" + echo "1. 英文 2. 简体中文 3. 繁体中文" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -6007,7 +6007,7 @@ mount_partition() { MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションのマウント + # パーティションをマウントする mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then @@ -6903,7 +6903,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') @@ -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 @@ -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 @@ -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 @@ -7186,7 +7186,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 ファイルを編集する" @@ -7663,7 +7663,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} @@ -8028,7 +8028,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" ;; @@ -8815,7 +8815,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}------------------------" @@ -9073,7 +9073,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 @@ -9082,7 +9082,7 @@ while true; do fi echo "" echo "------------------------" - echo "1. 使用する" + echo "1. 使用方法" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -12140,7 +12140,7 @@ while true; do r) root_use send_stats "すべてのアプリを復元する" - echo "利用可能なアプリケーションのバックアップ" + echo "利用可能なアプリのバックアップ" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -12188,7 +12188,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}------------------------" @@ -12378,7 +12378,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}------------------------" @@ -12449,7 +12449,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 @@ -12861,11 +12861,11 @@ EOF echo "タイムゾーンスイッチ" echo "------------------------" echo "アジア" - echo "1. 中国上海时间 2. 中国香港时间" + echo "1. 中国上海時間 2. 中国香港時間" echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9.タイ・バンコク時間" + echo "9. タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -13906,7 +13906,7 @@ while true; do 4) clear - send_stats "バックアップクラスタ" + send_stats "バックアップクラスター" echo -e "変更してください${gl_huang}/root/cluster/servers.py${gl_bai}ファイルをダウンロードしてバックアップを完了してください。" break_end ;; @@ -14175,7 +14175,7 @@ done k_info() { -send_stats "k コマンドリファレンスの使用例" +send_stats "k コマンドのリファレンス例" echo "-------------------" echo "ビデオ紹介: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" echo "以下は、k コマンドの参考使用例です。" @@ -14213,7 +14213,7 @@ echo "WordPress をインストールします。 kワードプレス | k wp xxx 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 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/kr/kejilion.sh b/kr/kejilion.sh index 37ec316ab..a8a45174a 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1122,7 +1122,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 "------------------------" @@ -2112,7 +2112,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}" @@ -2759,7 +2759,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 +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 @@ -3185,16 +3185,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" } @@ -3620,7 +3620,7 @@ EOF donlond_frp frps - # 생성된 정보를 출력 + # 생성된 정보 출력 ip_address echo "------------------------" echo "클라이언트 배포에 필요한 매개변수" @@ -3682,7 +3682,7 @@ remote_port = ${remote_port} EOF - # 생성된 정보를 출력 + # 생성된 정보 출력 echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." docker restart frpc @@ -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" ;; @@ -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 ;; @@ -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 @@ -5038,7 +5038,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 @@ -5056,7 +5056,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 @@ -6871,7 +6871,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 @@ -7010,7 +7010,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 @@ -7026,7 +7026,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 @@ -7145,7 +7145,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 "------------------------" @@ -7345,7 +7345,7 @@ linux_docker() { ;; 2) - read -e -p "삭제 볼륨 이름을 입력하세요(여러 볼륨 이름을 공백으로 구분하세요):" dockerjuans + read -e -p "삭제 볼륨 이름을 입력하십시오(여러 볼륨 이름을 공백으로 구분하십시오):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -8027,7 +8027,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" @@ -8815,7 +8815,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}------------------------" @@ -8855,7 +8855,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 지능형 문서 관리 시스템" @@ -9153,7 +9153,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" @@ -12140,7 +12140,7 @@ while true; do r) root_use send_stats "모든 앱 복원" - echo "사용 가능한 애플리케이션 백업" + echo "사용 가능한 앱 백업" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -12390,7 +12390,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}------------------------" @@ -12680,7 +12680,7 @@ EOF case "$choice" in 1) - send_stats "1G 가상 메모리가 설정되었습니다." + send_stats "1G 가상 메모리가 설정되었습니다" add_swap 1024 ;; @@ -12850,7 +12850,7 @@ EOF # 현재 시스템 시간대 가져오기 local timezone=$(current_timezone) - # 현재 시스템 시간 가져오기 + # 현재 시스템 시간을 가져옵니다 local current_time=$(date +"%Y-%m-%d %H:%M:%S") # 시간대 및 시간 표시 @@ -12938,7 +12938,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 @@ -13028,7 +13028,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) @@ -13728,7 +13728,7 @@ linux_file() { read -e -p "복사할 파일 또는 디렉터리 경로를 입력하세요." src_path if [ ! -e "$src_path" ]; then echo "오류: 파일 또는 디렉터리가 존재하지 않습니다." - send_stats "파일 또는 디렉터리 복사 실패: 파일 또는 디렉터리가 존재하지 않습니다." + send_stats "파일 또는 디렉터리를 복사하지 못했습니다. 파일 또는 디렉터리가 존재하지 않습니다." continue fi @@ -13914,7 +13914,7 @@ while true; do 5) clear send_stats "클러스터 복원" - echo "귀하의 server.py를 업로드하고 업로드를 시작하려면 아무 키나 누르십시오!" + echo "server.py를 업로드하고 아무 키나 눌러 업로드를 시작하세요!" echo -e "업로드해주세요${gl_huang}servers.py${gl_bai}파일을 제출하다${gl_huang}/root/cluster/${gl_bai}복원 완료!" break_end ;; @@ -14175,12 +14175,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는 나노 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 클린 | 케이 깨끗하다" @@ -14213,7 +14213,7 @@ echo "WordPress k wp 설치 | k 워드프레스 | kwp xxx.com" echo "역방향 프록시 설치 k fd |k rp |k 역방향 프록시 |k fd xxx.com" echo "로드 밸런싱 설치 k loadbalance |k 로드 밸런싱" echo "방화벽 패널 k fhq |k 방화벽" -echo "열린 포트 k ddk 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 차단" diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 11c99af6d..ca33acfcc 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -550,7 +550,7 @@ while true; do docker restart $dockername ;; 6) - send_stats "啟動所有容器" + send_stats "启动所有容器" docker start $(docker ps -a -q) ;; 7) @@ -756,7 +756,7 @@ install_crontab() { service cron start ;; *) - echo "不支援的發行版:$ID" + echo "不支持的发行版: $ID" return ;; esac @@ -1179,12 +1179,12 @@ iptables_panel() { ;; 5) - # IP 白名單 - read -e -p "請輸入放行的IP或IP段:" o_ip + # IP 白名单 + read -e -p "请输入放行的IP或IP段: " o_ip allow_ip $o_ip ;; 6) - # IP 黑名單 + # IP 黑名单 read -e -p "請輸入封鎖的IP或IP段:" c_ip block_ip $c_ip ;; @@ -3695,7 +3695,7 @@ EOF delete_forwarding_service() { send_stats "刪除frp內網服務" - # 提示使用者輸入需要刪除的服務名稱 + # 提示用户输入需要删除的服务名称 read -e -p "請輸入需要刪除的服務名稱:" service_name # 使用 sed 刪除該服務及其相關配置 sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml @@ -7845,8 +7845,8 @@ linux_ldnmp() { 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}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}------------------------" @@ -8576,7 +8576,7 @@ linux_ldnmp() { 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 @@ -12144,7 +12144,7 @@ while true; do 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 @@ -13021,7 +13021,7 @@ EOF 1) read -e -p "請輸入新任務的執行指令:" newquest echo "------------------------" - echo "1. 每月任務 2. 每週任務" + echo "1. 每月任务 2. 每周任务" echo "3. 每天任務 4. 每小時任務" echo "------------------------" read -e -p "請輸入你的選擇:" dingshi @@ -13283,7 +13283,7 @@ EOF echo "TG-bot監控預警功能" echo "影片介紹: https://youtu.be/vLL-eb3Z_TY" echo "------------------------------------------------" - echo "您需要設定tg機器人API和接收預警的使用者ID,即可實現本機CPU,內存,硬碟,流量,SSH登入的即時監控預警" + echo "您需要設定tg機器人API和接收預警的用戶ID,即可實現本機CPU,內存,硬碟,流量,SSH登入的即時監控預警" echo "到達閾值後會向用戶發送預警訊息" echo -e "${gl_hui}-關於流量,重啟伺服器將重新計算-${gl_bai}" read -e -p "確定繼續嗎? (Y/N):" choice @@ -13678,7 +13678,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 @@ -14065,7 +14065,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}腳本已更新至最新版本!${gl_huang}v$sh_v_new${gl_bai}" send_stats "腳本已經最新$sh_v_new" break_end ~/kejilion.sh From 22ed10e3b65ccedb72bdd2a7b13fc7e0f0b5ad69 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 3 May 2026 06:35:57 +0000 Subject: [PATCH 31/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202026-05-03=2006:35:57?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 66 +++++++++++++-------------- jp/kejilion.sh | 76 +++++++++++++++---------------- kr/kejilion.sh | 68 ++++++++++++++-------------- tw/kejilion.sh | 118 ++++++++++++++++++++++++------------------------- 4 files changed, 164 insertions(+), 164 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 040743676..139feec86 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -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 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 @@ -5654,9 +5654,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 @@ -5698,7 +5698,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[@]}" @@ -6951,7 +6951,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") @@ -6998,7 +6998,7 @@ 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 whether the container of 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] Containers are already running, skip restore...${NC}" @@ -7085,7 +7085,7 @@ docker_ssh_migration() { 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}Files under /home/docker have been restored${NC}" + echo -e "${GREEN}/home/docker 下的文件已还原完成${NC}" else echo -e "${YELLOW}The backup of the file under /home/docker was not found, skipping...${NC}" fi @@ -8815,7 +8815,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}------------------------" @@ -8835,37 +8835,37 @@ while true; do 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直播录制工具 ${gl_kjlan}40. ${color40}webssh网页版SSH连接工具" + 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}Nexterm远程连接工具" + 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}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主机建站管理面板" - 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 large model knowledge base${gl_huang}★${gl_bai}" - echo -e "${gl_kjlan}59. ${color59}NewAPI大模型资产管理 ${gl_kjlan}60. ${color60}JumpServer开源堡垒机" + 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大模型知识库" - echo -e "${gl_kjlan}63. ${color63}OpenWebUI自托管AI平台 ${gl_huang}★${gl_bai} ${gl_kjlan}64. ${color64}it-tools toolbox" - echo -e "${gl_kjlan}65. ${color65}n8n自动化工作流平台 ${gl_huang}★${gl_bai} ${gl_kjlan}66. ${color66}yt-dlp video download tool" - 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 file transfer tool${gl_kjlan}70. ${color70}AstrBot聊天机器人框架" + 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}71. ${color71}Navidrome私有音乐服务器 ${gl_kjlan}72. ${color72}bitwarden password manager${gl_huang}★${gl_bai}" + 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智能文档管理系统" + 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高性能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 is a great tool for watching movies together${gl_kjlan}88. ${color88}Owncast自托管直播平台" - echo -e "${gl_kjlan}89. ${color89}FileCodeBox file express${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 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}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" @@ -12140,7 +12140,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 "" @@ -12198,7 +12198,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" @@ -12545,7 +12545,7 @@ EOF echo -e "The current SSH port number is:${gl_huang}$current_port ${gl_bai}" echo "------------------------" - echo "The port number ranges from 1 to 65535. (Enter 0 to exit)" + echo "The port number ranges from 1 to 65535. (输入0退出)" # Prompt user for new SSH port number read -e -p "Please enter the new SSH port number:" new_port @@ -12636,7 +12636,7 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "Switched to IPv6 first" + echo "Switched to IPv6 priority" send_stats "Switched to IPv6 first" ;; @@ -13728,7 +13728,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 @@ -13990,7 +13990,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 "" @@ -14043,7 +14043,7 @@ while true; do if [ -n "$existing_cron" ]; then echo "------------------------" - echo -e "${gl_lv}自动更新已开启,每天凌晨2点脚本会自动更新!${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 "------------------------" diff --git a/jp/kejilion.sh b/jp/kejilion.sh index b7b7b31e4..9639b896d 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -531,7 +531,7 @@ while true; do ;; 2) send_stats "指定したコンテナを起動する" - read -e -p "コンテナ名を入力してください (複数のコンテナ名はスペースで区切ってください):" dockername + read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername docker start $dockername ;; 3) @@ -895,7 +895,7 @@ open_port() { done save_iptables_rules - send_stats "ポートがオープンされました" + send_stats "ポートがオープンしました" } @@ -2439,7 +2439,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) @@ -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 @@ -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" ;; @@ -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 \ @@ -4342,7 +4342,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 "------------------------" @@ -4722,7 +4722,7 @@ dd_xitong() { ;; 30) - send_stats "CentOS9を再インストールする" + send_stats "centos9を再インストールする" dd_xitong_3 bash reinstall.sh centos 9 reboot @@ -5056,7 +5056,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 @@ -5364,11 +5364,11 @@ Kernel_optimize() { echo -e "${gl_huang}ヒント:${gl_bai}本番環境では注意して使用してください。" echo "--------------------" echo "1. ハイパフォーマンス最適化モード: システムのパフォーマンスを最大化し、ファイル記述子、仮想メモリ、ネットワーク設定、キャッシュ管理、CPU 設定を最適化します。" - echo "2. 均衡优化模式: 在性能与资源消耗之间取得平衡,适合日常使用。" + echo "2. バランスのとれた最適化モード: パフォーマンスとリソース消費のバランスをとり、日常の使用に適しています。" echo "3. Web サイト最適化モード: Web サイトサーバーを最適化して、同時接続処理能力、応答速度、全体的なパフォーマンスを向上させます。" - echo "4. 直播优化模式: 针对直播推流的特殊需求进行优化,减少延迟,提高传输性能。" - echo "5. 游戏服优化模式: 针对游戏服务器进行优化,提高并发处理能力和响应速度。" - echo "6. 还原默认设置: 将系统设置还原为默认配置。" + echo "4. ライブ ブロードキャスト最適化モード: ライブ ストリーミングの特別なニーズを最適化し、遅延を削減し、送信パフォーマンスを向上させます。" + echo "5. ゲームサーバー最適化モード: ゲームサーバーを最適化して、同時処理能力と応答速度を向上させます。" + echo "6. デフォルト設定の復元: システム設定をデフォルト構成に復元します。" echo "--------------------" echo "0. 前のメニューに戻る" echo "--------------------" @@ -5472,7 +5472,7 @@ while true; do clear echo "現在のシステム言語:$LANG" echo "------------------------" - echo "1. 英文 2. 简体中文 3. 繁体中文" + echo "1. 英語 2. 簡体字中国語 3. 繁体字中国語" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -5654,9 +5654,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") # ユーザーにバックアップ ディレクトリの入力を求めるプロンプトを表示する @@ -5698,7 +5698,7 @@ create_backup() { echo "- $path" done - # バックアップの作成 + # バックアップを作成する echo "バックアップの作成$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" @@ -6007,7 +6007,7 @@ mount_partition() { MOUNT_POINT="/mnt/$PARTITION" mkdir -p "$MOUNT_POINT" - # パーティションをマウントする + # パーティションのマウント mount "/dev/$PARTITION" "$MOUNT_POINT" if [ $? -eq 0 ]; then @@ -6138,7 +6138,7 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "続行するには Enter キーを押してください..." + read -e -p "Enter キーを押して続行します..." done } @@ -6425,7 +6425,7 @@ rsync_manager() { 0) break ;; *) echo "選択が無効です。もう一度お試しください。" ;; esac - read -e -p "続行するには Enter キーを押してください..." + read -e -p "Enter キーを押して続行します..." done } @@ -6903,7 +6903,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') @@ -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 @@ -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 @@ -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 @@ -7663,7 +7663,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} @@ -8028,7 +8028,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" ;; @@ -8815,7 +8815,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}------------------------" @@ -9073,7 +9073,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 @@ -12140,7 +12140,7 @@ while true; do r) root_use send_stats "すべてのアプリを復元する" - echo "利用可能なアプリのバックアップ" + echo "利用可能なアプリケーションのバックアップ" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -12188,7 +12188,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}------------------------" @@ -12198,7 +12198,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" @@ -12378,7 +12378,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}------------------------" @@ -12449,7 +12449,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 @@ -12865,7 +12865,7 @@ EOF echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9. タイ・バンコク時間" + echo "9.タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -13622,7 +13622,7 @@ linux_file() { echo "5. ディレクトリを削除します。 6. 前のメニュー ディレクトリに戻ります。" echo "------------------------" echo "11. ファイルの作成 12. ファイルの編集 13. ファイル権限の変更 14. ファイル名の変更" - echo "15. ファイルの削除" + echo "15. 删除文件" echo "------------------------" echo "21. ファイル ディレクトリの圧縮 22. ファイル ディレクトリの解凍 23. ファイル ディレクトリの移動 24. ファイル ディレクトリのコピー" echo "25. 他のサーバーにファイルを転送する" @@ -13906,7 +13906,7 @@ while true; do 4) clear - send_stats "バックアップクラスター" + send_stats "バックアップクラスタ" echo -e "変更してください${gl_huang}/root/cluster/servers.py${gl_bai}ファイルをダウンロードしてバックアップを完了してください。" break_end ;; @@ -13990,7 +13990,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 "" @@ -14213,7 +14213,7 @@ echo "WordPress をインストールします。 kワードプレス | k wp xxx 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 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/kr/kejilion.sh b/kr/kejilion.sh index a8a45174a..137bba10e 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -1291,7 +1291,7 @@ check_swap() { local swap_total=$(free -m | awk 'NR==3{print $2}') -# 가상 메모리를 생성해야 하는지 결정 +# 가상 메모리를 만들어야 하는지 확인 [ "$swap_total" -gt 0 ] || add_swap 1024 @@ -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 @@ -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) - # 획득한 시간을 확인 + # 획득한 시간을 확인하세요. 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) @@ -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 @@ -2759,7 +2759,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 +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 @@ -3620,7 +3620,7 @@ EOF donlond_frp frps - # 생성된 정보 출력 + # 생성된 정보를 출력 ip_address echo "------------------------" echo "클라이언트 배포에 필요한 매개변수" @@ -3682,7 +3682,7 @@ remote_port = ${remote_port} EOF - # 생성된 정보 출력 + # 생성된 정보를 출력 echo "제공하다$service_namefrpc.toml에 성공적으로 추가되었습니다." docker restart frpc @@ -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" ;; @@ -5056,7 +5056,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 @@ -5092,7 +5092,7 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "스캔할 디렉터리를 지정하십시오." + echo "스캔할 디렉터리를 지정하세요." return fi @@ -5598,7 +5598,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 "------------------------" @@ -5837,7 +5837,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 @@ -6185,7 +6185,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 @@ -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 @@ -7651,7 +7651,7 @@ linux_Oracle() { 1) clear echo "활성 스크립트: CPU 사용량 10-20% 메모리 사용량 20%" - read -e -p "정말로 설치하시겠습니까? (예/아니요):" choice + read -e -p "설치하시겠습니까? (예/아니요):" choice case "$choice" in [Yy]) @@ -8815,7 +8815,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}------------------------" @@ -8855,7 +8855,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 지능형 문서 관리 시스템" @@ -9073,7 +9073,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 @@ -12140,7 +12140,7 @@ while true; do r) root_use send_stats "모든 앱 복원" - echo "사용 가능한 앱 백업" + echo "사용 가능한 애플리케이션 백업" echo "-------------------------" ls -lt /app*.gz | awk '{print $NF}' echo "" @@ -12198,7 +12198,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" @@ -12377,7 +12377,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 전환" @@ -12390,7 +12390,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}------------------------" @@ -12870,7 +12870,7 @@ EOF echo "유럽" echo "11. 영국 런던 시간 12. 프랑스 파리 시간" echo "13. 독일 베를린 시간 14. 러시아 모스크바 시간" - echo "15. 네덜란드 위트라흐트 시간 16. 스페인 마드리드 시간" + echo "15. 네덜란드 유트라흐트 시간 16. 스페인 마드리드 시간" echo "------------------------" echo "미국" echo "21. 미국 서부 시간 22. 미국 동부 시간" @@ -13028,7 +13028,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) @@ -13191,7 +13191,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 @@ -13281,7 +13281,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 "임계값에 도달하면 경고 메시지가 사용자에게 전송됩니다." @@ -13421,7 +13421,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}" @@ -13728,7 +13728,7 @@ linux_file() { read -e -p "복사할 파일 또는 디렉터리 경로를 입력하세요." src_path if [ ! -e "$src_path" ]; then echo "오류: 파일 또는 디렉터리가 존재하지 않습니다." - send_stats "파일 또는 디렉터리를 복사하지 못했습니다. 파일 또는 디렉터리가 존재하지 않습니다." + send_stats "파일 또는 디렉터리 복사 실패: 파일 또는 디렉터리가 존재하지 않습니다." continue fi @@ -13990,7 +13990,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 "" @@ -14209,16 +14209,16 @@ 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 "방화벽 패널 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 "애플리케이션 시장관리 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 ca33acfcc..1057a2fe5 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -58,7 +58,7 @@ CheckFirstRun_true() { # 收集功能埋藏資訊的函數,記錄當前腳本版本號,使用時間,系統版本,CPU架構,機器所在國家和用戶使用的功能名稱,絕對不涉及任何敏感信息,請放心!請相信我! -# 為什麼要設計這個功能,目的更好的了解使用者喜歡使用的功能,進一步優化功能推出更多符合使用者需求的功能。 +# 为什么要设计这个功能,目的更好的了解用户喜欢使用的功能,进一步优化功能推出更多符合用户需求的功能。 # 全文可搜尋 send_stats 函數呼叫位置,透明開源,如有顧慮可拒絕使用。 @@ -550,7 +550,7 @@ while true; do docker restart $dockername ;; 6) - send_stats "启动所有容器" + send_stats "啟動所有容器" docker start $(docker ps -a -q) ;; 7) @@ -659,7 +659,7 @@ while true; do 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 ;; @@ -756,7 +756,7 @@ install_crontab() { service cron start ;; *) - echo "不支持的发行版: $ID" + echo "不支援的發行版:$ID" return ;; esac @@ -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 @@ -1179,12 +1179,12 @@ iptables_panel() { ;; 5) - # IP 白名单 - read -e -p "请输入放行的IP或IP段: " o_ip + # IP 白名單 + read -e -p "請輸入放行的IP或IP段:" o_ip allow_ip $o_ip ;; 6) - # IP 黑名单 + # IP 黑名單 read -e -p "請輸入封鎖的IP或IP段:" c_ip block_ip $c_ip ;; @@ -1250,7 +1250,7 @@ iptables_panel() { add_swap() { local new_swap=$1 # 获取传入的参数 - # 取得目前系統中所有的 swap 分割區 + # 获取当前系统中所有的 swap 分区 local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') # 遍歷並刪除所有的 swap 分割區 @@ -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 } @@ -1745,7 +1745,7 @@ 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 @@ -2115,7 +2115,7 @@ web_security() { 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 "--------------" @@ -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 @@ -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 @@ -3287,7 +3287,7 @@ ldnmp_Proxy_backend() { 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 @@ -3620,16 +3620,16 @@ EOF donlond_frp frps - # 輸出產生的信息 + # 输出生成的信息 ip_address echo "------------------------" echo "客戶端部署時所需使用的參數" - echo "服務IP:$ipv4_address" + echo "服务IP: $ipv4_address" echo "token: $token" echo echo "FRP面板資訊" echo "FRP面板位址: http://$ipv4_address:$dashboard_port" - echo "FRP面板使用者名稱:$dashboard_user" + echo "FRP面板用户名: $dashboard_user" echo "FRP面板密碼:$dashboard_pwd" echo @@ -3663,7 +3663,7 @@ 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} @@ -3695,7 +3695,7 @@ EOF delete_forwarding_service() { send_stats "刪除frp內網服務" - # 提示用户输入需要删除的服务名称 + # 提示使用者輸入需要刪除的服務名稱 read -e -p "請輸入需要刪除的服務名稱:" service_name # 使用 sed 刪除該服務及其相關配置 sed -i "/\[$service_name\]/,/^$/d" /home/frp/frpc.toml @@ -3772,7 +3772,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 +3790,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 @@ -4488,7 +4488,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}" } @@ -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 "僅支援Debian/Ubuntu" echo "請備份數據,將為你升級Linux核心開啟BBR3" @@ -5186,7 +5186,7 @@ clamav() { -# 高效能模式最佳化函數 +# 高性能模式优化函数 optimize_high_performance() { echo -e "${gl_lv}切換到${tiaoyou_moshi}...${gl_bai}" @@ -5662,7 +5662,7 @@ create_backup() { # 提示使用者輸入備份目錄 echo "建立備份範例:" echo "- 備份單一目錄: /var/www" - echo "- 備份多個目錄: /etc /home /var/log" + echo " - 备份多个目录: /etc /home /var/log" echo "- 直接回車將使用預設目錄 (/etc /usr /home)" read -r -p "請輸入要備份的目錄(多個目錄以空格分隔,直接回車則使用預設目錄):" input @@ -5811,7 +5811,7 @@ list_connections() { add_connection() { send_stats "新增連接" echo "建立新連接範例:" - echo "- 連線名稱: my_server" + echo " - 连接名称: my_server" echo "- IP位址: 192.168.1.100" echo "- 使用者名稱: root" echo "- 連接埠: 22" @@ -6047,9 +6047,9 @@ list_mounted_partitions() { df -h | grep -v "tmpfs\|udev\|overlay" } -# 格式化分割區 +# 格式化分区 format_partition() { - send_stats "格式化分割區" + send_stats "格式化分区" read -e -p "請輸入要格式化的分割區名稱(例如 sda1):" PARTITION # 檢查分割區是否存在 @@ -6060,11 +6060,11 @@ format_partition() { # 檢查分割區是否已經掛載 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "分割區已經掛載,請先卸載!" + echo "分区已经挂载,请先卸载!" return fi - # 選擇檔案系統類型 + # 选择文件系统类型 echo "請選擇檔案系統類型:" echo "1. ext4" echo "2. xfs" @@ -6233,7 +6233,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 @@ -6243,7 +6243,7 @@ delete_task() { 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 @@ -6542,7 +6542,7 @@ linux_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}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}------------------------" @@ -6921,7 +6921,7 @@ 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}" @@ -6989,7 +6989,7 @@ docker_ssh_migration() { 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 @@ -7544,7 +7544,7 @@ linux_test() { ;; 15) clear - send_stats "nxtrace指定IP回程測試腳本" + send_stats "nxtrace指定IP回程测试脚本" echo "可參考的IP列表" echo "------------------------" echo "北京電信: 219.141.136.12" @@ -7845,8 +7845,8 @@ linux_ldnmp() { 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}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}------------------------" @@ -8079,7 +8079,7 @@ linux_ldnmp() { echo "資料庫名稱:$dbname" echo "使用者名稱:$dbuse" echo "密碼:$dbusepasswd" - echo "表字首: flarum_" + echo "表前缀: flarum_" echo "管理員資訊自行設定" ;; @@ -8113,7 +8113,7 @@ linux_ldnmp() { clear ldnmp_web_on - echo "資料庫前綴: typecho_" + echo "数据库前缀: typecho_" echo "資料庫位址: mysql" echo "使用者名稱:$dbuse" echo "密碼:$dbusepasswd" @@ -8644,7 +8644,7 @@ 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 "------------------------" @@ -8862,8 +8862,8 @@ while true; do 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}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}------------------------" @@ -11073,7 +11073,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 \ @@ -13021,7 +13021,7 @@ EOF 1) read -e -p "請輸入新任務的執行指令:" newquest echo "------------------------" - echo "1. 每月任务 2. 每周任务" + echo "1. 每月任務 2. 每週任務" echo "3. 每天任務 4. 每小時任務" echo "------------------------" read -e -p "請輸入你的選擇:" dingshi @@ -13160,7 +13160,7 @@ 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 @@ -13416,16 +13416,16 @@ EOF send_stats "一條龍調優" echo "一條龍系統調優" echo "------------------------------------------------" - echo "將對以下內容進行操作與優化" - echo "1. 更新系統到最新" + 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 "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 @@ -13624,7 +13624,7 @@ linux_file() { echo "11. 建立文件 12. 編輯文件 13. 修改文件權限 14. 重新命名文件" echo "15. 刪除文件" echo "------------------------" - echo "21. 壓縮檔案目錄 22. 解壓縮檔案目錄 23. 行動檔案目錄 24. 複製檔案目錄" + echo "21. 压缩文件目录 22. 解压文件目录 23. 移动文件目录 24. 复制文件目录" echo "25. 傳文件至其他伺服器" echo "------------------------" echo "0. 返回上一級選單" @@ -13638,7 +13638,7 @@ linux_file() { send_stats "進入目錄" ;; 2) # 创建目录 - read -e -p "請輸入要建立的目錄名稱:" dirname + read -e -p "请输入要创建的目录名: " dirname mkdir -p "$dirname" && echo "目錄已建立" || echo "創建失敗" send_stats "建立目錄" ;; @@ -13678,7 +13678,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 @@ -13987,7 +13987,7 @@ echo "------------------------" echo -e "${gl_lan}DMIT 28刀每季 美國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刀每月 東京軟銀 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&?affid=1355&?affid=1355${gl_bai}" echo "------------------------" echo -e "${gl_kjlan}VPS更多熱門優惠${gl_bai}" From 055a55cd4bf7f1858ca2ee7d917f3144d9498f94 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sun, 10 May 2026 06:44:49 +0000 Subject: [PATCH 32/32] =?UTF-8?q?=F0=9F=8C=90=20Weekly=20translation=20upd?= =?UTF-8?q?ate=20-=202026-05-10=2006:44:49?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- en/kejilion.sh | 32 ++++++------ jp/kejilion.sh | 46 ++++++++--------- kr/kejilion.sh | 34 ++++++------- tw/kejilion.sh | 136 ++++++++++++++++++++++++------------------------- 4 files changed, 124 insertions(+), 124 deletions(-) diff --git a/en/kejilion.sh b/en/kejilion.sh index 139feec86..e03502e12 100644 --- a/en/kejilion.sh +++ b/en/kejilion.sh @@ -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 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 @@ -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 setup is complete!${gl_bai}" +echo -e "${gl_lv}ROOT login setup is completed!${gl_bai}" } @@ -5654,9 +5654,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 @@ -5698,7 +5698,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[@]}" @@ -6119,7 +6119,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 @@ -6951,7 +6951,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") @@ -6998,7 +6998,7 @@ 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 - # 检查该 compose 项目的容器是否已经在运行 + # 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] Containers are already running, skip restore...${NC}" @@ -7085,7 +7085,7 @@ docker_ssh_migration() { 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}/home/docker 下的文件已还原完成${NC}" + echo -e "${GREEN}Files under /home/docker have been restored${NC}" else echo -e "${YELLOW}The backup of the file under /home/docker was not found, skipping...${NC}" fi @@ -7112,7 +7112,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 @@ -8815,7 +8815,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}------------------------" @@ -9153,7 +9153,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" @@ -12198,7 +12198,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" @@ -12545,7 +12545,7 @@ EOF echo -e "The current SSH port number is:${gl_huang}$current_port ${gl_bai}" echo "------------------------" - echo "The port number ranges from 1 to 65535. (输入0退出)" + echo "The port number ranges from 1 to 65535. (Enter 0 to exit)" # Prompt user for new SSH port number read -e -p "Please enter the new SSH port number:" new_port @@ -12636,7 +12636,7 @@ EOF ;; 2) rm -f /etc/gai.conf - echo "Switched to IPv6 priority" + echo "Switched to IPv6 first" send_stats "Switched to IPv6 first" ;; @@ -14139,7 +14139,7 @@ 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}" -echo -e "${gl_kjlan}0. ${gl_bai}Exit script" +echo -e "${gl_kjlan}0. ${gl_bai}exit script" echo -e "${gl_kjlan}------------------------${gl_bai}" read -e -p "Please enter your choice:" choice diff --git a/jp/kejilion.sh b/jp/kejilion.sh index 9639b896d..88e1cf8b6 100644 --- a/jp/kejilion.sh +++ b/jp/kejilion.sh @@ -531,7 +531,7 @@ while true; do ;; 2) send_stats "指定したコンテナを起動する" - read -e -p "请输入容器名(多个容器名请用空格分隔): " dockername + read -e -p "コンテナ名を入力してください (複数のコンテナ名はスペースで区切ってください):" dockername docker start $dockername ;; 3) @@ -2439,7 +2439,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) @@ -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 @@ -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" ;; @@ -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ログインの設定は完了です!${gl_bai}" +echo -e "${gl_lv}ROOTログインの設定が完了しました!${gl_bai}" } @@ -5056,7 +5056,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 @@ -5654,9 +5654,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") # ユーザーにバックアップ ディレクトリの入力を求めるプロンプトを表示する @@ -5698,7 +5698,7 @@ create_backup() { echo "- $path" done - # バックアップを作成する + # バックアップの作成 echo "バックアップの作成$BACKUP_NAME..." install tar tar -czvf "$BACKUP_DIR/$BACKUP_NAME" "${BACKUP_PATHS[@]}" @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "ハードディスク管理機能" while true; do clear - echo "ハードディスクのパーティション管理" + echo "ハードドライブのパーティション管理" echo -e "${gl_huang}この機能は内部テスト中であるため、運用環境では使用しないでください。${gl_bai}" echo "------------------------" list_partitions @@ -6138,7 +6138,7 @@ disk_manager() { 5) check_partition ;; *) break ;; esac - read -e -p "Enter キーを押して続行します..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -6425,7 +6425,7 @@ rsync_manager() { 0) break ;; *) echo "選択が無効です。もう一度お試しください。" ;; esac - read -e -p "Enter キーを押して続行します..." + read -e -p "続行するには Enter キーを押してください..." done } @@ -7112,7 +7112,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 @@ -7186,7 +7186,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 ファイルを編集する" @@ -8815,7 +8815,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}------------------------" @@ -9082,7 +9082,7 @@ while true; do fi echo "" echo "------------------------" - echo "1. 使用方法" + echo "1. 使用する" echo "------------------------" echo "0. 前のメニューに戻る" echo "------------------------" @@ -11844,7 +11844,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,) @@ -12198,7 +12198,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" @@ -12865,7 +12865,7 @@ EOF echo "3. 東京、日本時間 4. ソウル、韓国時間" echo "5. シンガポール時間 6. インド、コルカタ時間" echo "7. アラブ首長国連邦、ドバイ時間 8. オーストラリア、シドニー時間" - echo "9.タイ・バンコク時間" + echo "9. タイ・バンコク時間" echo "------------------------" echo "ヨーロッパ" echo "11. ロンドン、イギリス時間 12. パリ、フランス時間" @@ -13622,7 +13622,7 @@ linux_file() { echo "5. ディレクトリを削除します。 6. 前のメニュー ディレクトリに戻ります。" echo "------------------------" echo "11. ファイルの作成 12. ファイルの編集 13. ファイル権限の変更 14. ファイル名の変更" - echo "15. 删除文件" + echo "15. ファイルの削除" echo "------------------------" echo "21. ファイル ディレクトリの圧縮 22. ファイル ディレクトリの解凍 23. ファイル ディレクトリの移動 24. ファイル ディレクトリのコピー" echo "25. 他のサーバーにファイルを転送する" @@ -13868,7 +13868,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}システムをクリーンアップする" @@ -13972,7 +13972,7 @@ echo "ユーザーには、よりシンプルでエレガントなプロモー echo "" echo -e "サーバー割引" echo "------------------------" -echo -e "${gl_lan}Laika Cloud 香港 CN2 GIA 韓国のデュアル ISP 米国 CN2 GIA プロモーション${gl_bai}" +echo -e "${gl_lan}莱卡云 香港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}" @@ -13990,7 +13990,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 137bba10e..b84dc7af2 100644 --- a/kr/kejilion.sh +++ b/kr/kejilion.sh @@ -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 @@ -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 @@ -5092,7 +5092,7 @@ clamav_freshclam() { clamav_scan() { if [ $# -eq 0 ]; then - echo "스캔할 디렉터리를 지정하세요." + echo "스캔할 디렉터리를 지정하십시오." return fi @@ -5837,7 +5837,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 @@ -6119,7 +6119,7 @@ disk_manager() { send_stats "하드디스크 관리 기능" while true; do clear - echo "하드 디스크 파티션 관리" + echo "하드 드라이브 파티션 관리" echo -e "${gl_huang}이 기능은 내부 테스트 중이므로 프로덕션 환경에서는 사용하면 안 됩니다.${gl_bai}" echo "------------------------" list_partitions @@ -7112,7 +7112,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 @@ -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 @@ -7345,7 +7345,7 @@ linux_docker() { ;; 2) - read -e -p "삭제 볼륨 이름을 입력하십시오(여러 볼륨 이름을 공백으로 구분하십시오):" dockerjuans + read -e -p "삭제 볼륨 이름을 입력하세요(여러 볼륨 이름을 공백으로 구분하세요):" dockerjuans for dockerjuan in $dockerjuans; do docker volume rm $dockerjuan @@ -8815,7 +8815,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}------------------------" @@ -9064,7 +9064,7 @@ while true; do ;; 7|nezha) clear - send_stats "네자 빌드" + send_stats "나타 빌드" local app_id="7" local docker_name="nezha-dashboard" @@ -9073,7 +9073,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 @@ -9153,7 +9153,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" @@ -9185,7 +9185,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 "------------------------" @@ -12198,7 +12198,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" @@ -13990,7 +13990,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 "" @@ -14139,7 +14139,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 diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 1057a2fe5..61a31a4b6 100644 --- a/tw/kejilion.sh +++ b/tw/kejilion.sh @@ -57,8 +57,8 @@ CheckFirstRun_true() { -# 收集功能埋藏資訊的函數,記錄當前腳本版本號,使用時間,系統版本,CPU架構,機器所在國家和用戶使用的功能名稱,絕對不涉及任何敏感信息,請放心!請相信我! -# 为什么要设计这个功能,目的更好的了解用户喜欢使用的功能,进一步优化功能推出更多符合用户需求的功能。 +# 收集功能埋点信息的函数,记录当前脚本版本号,使用时间,系统版本,CPU架构,机器所在国家和用户使用的功能名称,绝对不涉及任何敏感信息,请放心!請相信我! +# 為什麼要設計這個功能,目的更好的了解使用者喜歡使用的功能,進一步優化功能推出更多符合使用者需求的功能。 # 全文可搜尋 send_stats 函數呼叫位置,透明開源,如有顧慮可拒絕使用。 @@ -268,7 +268,7 @@ remove() { } -# 通用 systemctl 函數,適用於各種發行版 +# 通用 systemctl 函数,适用于各种发行版 systemctl() { local COMMAND="$1" local SERVICE_NAME="$2" @@ -315,7 +315,7 @@ stop() { status() { systemctl status "$1" if [ $? -eq 0 ]; then - echo "$1服務狀態已顯示。" + echo "$1 服务状态已显示。" else echo "錯誤:無法顯示$1服務狀態。" fi @@ -659,7 +659,7 @@ while true; do 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 ;; @@ -667,7 +667,7 @@ while true; do 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 ;; @@ -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 @@ -1250,7 +1250,7 @@ iptables_panel() { add_swap() { local new_swap=$1 # 获取传入的参数 - # 获取当前系统中所有的 swap 分区 + # 取得目前系統中所有的 swap 分割區 local swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}') # 遍歷並刪除所有的 swap 分割區 @@ -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 } @@ -1745,7 +1745,7 @@ 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 @@ -2115,7 +2115,7 @@ web_security() { 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 "--------------" @@ -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 @@ -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 @@ -3287,7 +3287,7 @@ ldnmp_Proxy_backend() { 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 @@ -3374,7 +3374,7 @@ ldnmp_web_status() { echo "------------------------" echo "1. 申請/更新網域憑證 2. 更換站點域名" echo "3. 清理站點快取 4. 建立關聯站點" - echo "5. 查看訪問日誌 6. 查看錯誤日誌" + echo "5. 查看访问日志 6. 查看错误日志" echo "7. 編輯全域配置 8. 編輯站點配置" echo "9. 管理站點資料庫 10. 查看站點分析報告" echo "------------------------" @@ -3620,16 +3620,16 @@ EOF donlond_frp frps - # 输出生成的信息 + # 輸出產生的信息 ip_address echo "------------------------" echo "客戶端部署時所需使用的參數" - echo "服务IP: $ipv4_address" + echo "服務IP:$ipv4_address" echo "token: $token" echo echo "FRP面板資訊" echo "FRP面板位址: http://$ipv4_address:$dashboard_port" - echo "FRP面板用户名: $dashboard_user" + echo "FRP面板使用者名稱:$dashboard_user" echo "FRP面板密碼:$dashboard_pwd" echo @@ -3663,7 +3663,7 @@ 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} @@ -3772,7 +3772,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 +3790,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 @@ -3804,7 +3804,7 @@ generate_access_urls() { fi done - # 只在有有效連接埠時顯示標題和內容 + # 只在有有效端口时显示标题和内容 if [ "$has_valid_ports" = true ]; then echo "FRP服務對外存取位址:" @@ -4488,7 +4488,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}" } @@ -4857,12 +4857,12 @@ bbrv3() { clear local kernel_version=$(uname -r) echo "您已安裝xanmod的BBRv3內核" - echo "當前核心版本:$kernel_version" + echo "当前内核版本: $kernel_version" echo "" echo "核心管理" echo "------------------------" - echo "1. 更新BBRv3內核 2. 卸載BBRv3內核" + echo "1. 更新BBRv3内核 2. 卸载BBRv3内核" echo "------------------------" echo "0. 返回上一級選單" echo "------------------------" @@ -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 "僅支援Debian/Ubuntu" echo "請備份數據,將為你升級Linux核心開啟BBR3" @@ -5186,7 +5186,7 @@ clamav() { -# 高性能模式优化函数 +# 高效能模式最佳化函數 optimize_high_performance() { echo -e "${gl_lv}切換到${tiaoyou_moshi}...${gl_bai}" @@ -5312,7 +5312,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 @@ -5662,7 +5662,7 @@ create_backup() { # 提示使用者輸入備份目錄 echo "建立備份範例:" echo "- 備份單一目錄: /var/www" - echo " - 备份多个目录: /etc /home /var/log" + echo "- 備份多個目錄: /etc /home /var/log" echo "- 直接回車將使用預設目錄 (/etc /usr /home)" read -r -p "請輸入要備份的目錄(多個目錄以空格分隔,直接回車則使用預設目錄):" input @@ -5811,7 +5811,7 @@ list_connections() { add_connection() { send_stats "新增連接" echo "建立新連接範例:" - echo " - 连接名称: my_server" + echo "- 連線名稱: my_server" echo "- IP位址: 192.168.1.100" echo "- 使用者名稱: root" echo "- 連接埠: 22" @@ -6047,9 +6047,9 @@ list_mounted_partitions() { df -h | grep -v "tmpfs\|udev\|overlay" } -# 格式化分区 +# 格式化分割區 format_partition() { - send_stats "格式化分区" + send_stats "格式化分割區" read -e -p "請輸入要格式化的分割區名稱(例如 sda1):" PARTITION # 檢查分割區是否存在 @@ -6060,11 +6060,11 @@ format_partition() { # 檢查分割區是否已經掛載 if lsblk -o MOUNTPOINT | grep -w "$PARTITION" > /dev/null; then - echo "分区已经挂载,请先卸载!" + echo "分割區已經掛載,請先卸載!" return fi - # 选择文件系统类型 + # 選擇檔案系統類型 echo "請選擇檔案系統類型:" echo "1. ext4" echo "2. xfs" @@ -6233,7 +6233,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 @@ -6243,7 +6243,7 @@ delete_task() { 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 @@ -6540,15 +6540,15 @@ linux_tools() { # 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}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}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}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}跑火車屏保" @@ -6921,7 +6921,7 @@ 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}" @@ -6989,7 +6989,7 @@ docker_ssh_migration() { 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 @@ -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 "湖南電信: 36.111.200.100" @@ -8027,7 +8027,7 @@ linux_ldnmp() { echo "使用者名稱: admin" echo "密碼: admin" echo "------------------------" - echo "登入時右上角如果出現紅色error0請使用下列指令:" + echo "登录时右上角如果出现红色error0请使用如下命令: " echo "我也很氣憤獨角數卡為啥這麼麻煩,會有這樣的問題!" echo "sed -i 's/ADMIN_HTTPS=false/ADMIN_HTTPS=true/g' /home/web/html/$yuming/dujiaoka/.env" @@ -8035,7 +8035,7 @@ linux_ldnmp() { 7) clear - # flarum論壇 + # flarum论坛 webname="flarum论坛" send_stats "安裝$webname" echo "開始部署$webname" @@ -8080,7 +8080,7 @@ linux_ldnmp() { echo "使用者名稱:$dbuse" echo "密碼:$dbusepasswd" echo "表前缀: flarum_" - echo "管理員資訊自行設定" + echo "管理员信息自行设置" ;; @@ -8113,7 +8113,7 @@ linux_ldnmp() { clear ldnmp_web_on - echo "数据库前缀: typecho_" + echo "資料庫前綴: typecho_" echo "資料庫位址: mysql" echo "使用者名稱:$dbuse" echo "密碼:$dbusepasswd" @@ -8644,7 +8644,7 @@ 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 "------------------------" @@ -8819,7 +8819,7 @@ while true; do 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}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" @@ -8837,7 +8837,7 @@ while true; do 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}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}普羅米修斯(主機監控)" @@ -8862,8 +8862,8 @@ while true; do 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}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}------------------------" @@ -11073,7 +11073,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 \ @@ -11924,7 +11924,7 @@ while true; do 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}3. Linux用脚本部署WG客户端,复制配置代码连接网络。${gl_bai}" echo -e "${gl_lv}官方客戶端下載方式: https://www.wireguard.com/install/${gl_bai}" break_end @@ -12560,7 +12560,7 @@ EOF break else echo "連接埠號碼無效,請輸入1到65535之間的數字。" - send_stats "輸入無效SSH端口" + send_stats "输入无效SSH端口" break_end fi else @@ -12777,7 +12777,7 @@ EOF ;; 5) - read -e -p "請輸入要刪除的使用者名稱:" username + read -e -p "请输入要删除的用户名: " username # 刪除使用者及其主目錄 userdel -r "$username" ;; @@ -13416,16 +13416,16 @@ EOF send_stats "一條龍調優" echo "一條龍系統調優" echo "------------------------------------------------" - echo "将对以下内容进行操作与优化" - echo "1. 更新系统到最新" + 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 "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 @@ -13634,11 +13634,11 @@ linux_file() { 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 + read -e -p "請輸入要建立的目錄名稱:" dirname mkdir -p "$dirname" && echo "目錄已建立" || echo "創建失敗" send_stats "建立目錄" ;; @@ -13766,7 +13766,7 @@ linux_file() { read -e -p "請輸入遠端伺服器密碼:" -s remote_password echo if [ -z "$remote_password" ]; then - echo "錯誤: 請輸入遠端伺服器密碼。" + echo "错误: 请输入远端服务器密码。" send_stats "傳送檔案失敗: 未輸入遠端伺服器密碼" continue fi @@ -13987,7 +13987,7 @@ echo "------------------------" echo -e "${gl_lan}DMIT 28刀每季 美國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刀每月 东京软银 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&?affid=1355&?affid=1355${gl_bai}" echo "------------------------" echo -e "${gl_kjlan}VPS更多熱門優惠${gl_bai}"