diff --git a/en/kejilion.sh b/en/kejilion.sh index 322c45f41..9a13e943d 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 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 release:" 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 mode parameters + # 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 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 } @@ -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 "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 -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 multifunctional 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,8 +8018,8 @@ 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 "Backend login path: /admin" @@ -8027,15 +8027,15 @@ linux_ldnmp() { echo "Username: admin" echo "Password: admin" echo "------------------------" - echo "If red error0 appears in the upper right corner when logging in, please use the following command:" - echo "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 services$check_docker $update_status" + echo "poste.io is an open source mail server solution," echo "Video introduction: https://www.bilibili.com/video/BV1wv421C71t?t=0.1" echo "" @@ -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) @@ -12636,15 +12636,15 @@ 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) 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 what time to perform tasks every day? (Hours, 0-23):" hour + read -e -p "What time do you choose to perform the task every day? (hours, 0-23):" hour (crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1 ;; 4) - read -e -p "Enter what minute of the hour to perform the task? (mins, 0-60):" minute + read -e -p "Enter what time of the hour the task should be executed? (minutes, 0-60):" minute (crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1 ;; *) 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 instructions" echo -e "${gl_kjlan}------------------------${gl_bai}" echo -e "${gl_kjlan}0. ${gl_bai}Return to main menu" echo -e "${gl_kjlan}------------------------${gl_bai}" - read -e -p "Please enter your selection:" sub_choice + read -e -p "Please enter your choice:" sub_choice case $sub_choice in 1) - send_stats "Add a cluster server" + send_stats "Add cluster server" read -e -p "Server name:" server_name read -e -p "Server IP:" server_ip - read -e -p "Server Port (22):" server_port + 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 ;; @@ -14178,55 +14178,55 @@ k_info() { send_stats "k command reference use case" echo "-------------------" echo "Video introduction: https://www.bilibili.com/video/BV1ib421E7it?t=0.1" -echo "The following is the k command reference use case:" +echo "The following is a reference use case for the k command:" echo "Start script k" -echo "Install software package k install nano wget | k add nano wget | k Install nano wget" -echo "Uninstall the package k remove nano wget | k del nano wget | k uninstall nano wget | k Uninstall nano wget" +echo "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 c93e5aea8..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}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を閉じる:コメントを追加します + # ブロトリを閉じる: コメントを追加 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 b7d69c906..37ec316ab 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,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 @@ -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 -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는 나노 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,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 "$@" ;; diff --git a/tw/kejilion.sh b/tw/kejilion.sh index 05b2db1f1..11c99af6d 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,10 +1250,10 @@ 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" @@ -1266,7 +1266,7 @@ add_swap() { # 刪除舊的 /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 "刪除系統日誌..." 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 @@ -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 ;; *)