- 移除旧有的 LDNMP、面板、Docker 应用、甲骨文云和幻兽帕鲁功能 - 删除不再使用的部署脚本及相关配置文件 - 保留系统、Docker、网络、安全、监控、工作区和集群管理等核心功能 - 更新项目介绍并新增详细功能说明
3606 lines
117 KiB
Bash
3606 lines
117 KiB
Bash
#!/bin/bash
|
||
|
||
sh_v="2.6.7"
|
||
|
||
huang='\033[33m'
|
||
bai='\033[0m'
|
||
lv='\033[0;32m'
|
||
lan='\033[0;34m'
|
||
hong='\033[31m'
|
||
kjlan='\033[96m'
|
||
hui='\e[37m'
|
||
|
||
cp ./kejilion.sh /usr/local/bin/k > /dev/null 2>&1
|
||
|
||
|
||
|
||
|
||
ip_address() {
|
||
ipv4_address=$(curl -s ipv4.ip.sb)
|
||
ipv6_address=$(curl -s --max-time 1 ipv6.ip.sb)
|
||
}
|
||
|
||
|
||
|
||
install() {
|
||
if [ $# -eq 0 ]; then
|
||
echo "未提供软件包参数!"
|
||
return 1
|
||
fi
|
||
|
||
for package in "$@"; do
|
||
if ! command -v "$package" &>/dev/null; then
|
||
echo "正在安装 $package..."
|
||
if command -v dnf &>/dev/null; then
|
||
dnf -y update && dnf install -y "$package"
|
||
elif command -v yum &>/dev/null; then
|
||
yum -y update && yum -y install "$package"
|
||
elif command -v apt &>/dev/null; then
|
||
apt update -y && apt install -y "$package"
|
||
elif command -v apk &>/dev/null; then
|
||
apk update && apk add "$package"
|
||
else
|
||
echo "未知的包管理器!"
|
||
return 1
|
||
fi
|
||
else
|
||
echo "$package 已经安装。"
|
||
fi
|
||
done
|
||
|
||
return 0
|
||
}
|
||
|
||
|
||
install_dependency() {
|
||
clear
|
||
install wget socat unzip tar
|
||
}
|
||
|
||
|
||
remove() {
|
||
if [ $# -eq 0 ]; then
|
||
echo "未提供软件包参数!"
|
||
return 1
|
||
fi
|
||
|
||
for package in "$@"; do
|
||
echo "正在卸载 $package..."
|
||
if command -v dnf &>/dev/null; then
|
||
dnf remove -y "${package}*"
|
||
elif command -v yum &>/dev/null; then
|
||
yum remove -y "${package}*"
|
||
elif command -v apt &>/dev/null; then
|
||
apt purge -y "${package}*"
|
||
elif command -v apk &>/dev/null; then
|
||
apk del "${package}*"
|
||
else
|
||
echo "未知的包管理器!"
|
||
return 1
|
||
fi
|
||
done
|
||
|
||
return 0
|
||
}
|
||
|
||
|
||
break_end() {
|
||
echo -e "${lv}操作完成${bai}"
|
||
echo "按任意键继续..."
|
||
read -n 1 -s -r -p ""
|
||
echo ""
|
||
clear
|
||
}
|
||
|
||
kejilion() {
|
||
k
|
||
exit
|
||
}
|
||
|
||
install_add_docker() {
|
||
if [ -f "/etc/alpine-release" ]; then
|
||
apk update
|
||
apk add docker docker-compose
|
||
rc-update add docker default
|
||
service docker start
|
||
else
|
||
country=$(curl -s ipinfo.io/country)
|
||
if [ "$country" = "CN" ]; then
|
||
cd ~
|
||
curl -sS -O https://raw.gitmirror.com/kejilion/docker/main/install && chmod +x install
|
||
sh install --mirror Aliyun
|
||
rm -f install
|
||
cat > /etc/docker/daemon.json << EOF
|
||
{
|
||
"registry-mirrors": ["https://docker.kejilion.pro"]
|
||
}
|
||
EOF
|
||
else
|
||
curl -fsSL https://get.docker.com | sh
|
||
fi
|
||
systemctl start docker
|
||
systemctl enable docker
|
||
fi
|
||
|
||
sleep 2
|
||
}
|
||
|
||
|
||
install_docker() {
|
||
if ! command -v docker &>/dev/null; then
|
||
install_add_docker
|
||
else
|
||
echo "Docker环境已经安装"
|
||
fi
|
||
}
|
||
|
||
docker_restart() {
|
||
if [ -f "/etc/alpine-release" ]; then
|
||
service docker restart
|
||
else
|
||
systemctl restart docker
|
||
fi
|
||
|
||
}
|
||
|
||
docker_ipv6_on() {
|
||
mkdir -p /etc/docker &>/dev/null
|
||
|
||
cat > /etc/docker/daemon.json << EOF
|
||
|
||
{
|
||
"ipv6": true,
|
||
"fixed-cidr-v6": "2001:db8:1::/64"
|
||
}
|
||
|
||
EOF
|
||
|
||
docker_restart
|
||
|
||
echo "Docker已开启v6访问"
|
||
|
||
}
|
||
|
||
|
||
docker_ipv6_off() {
|
||
|
||
rm -rf etc/docker/daemon.json &>/dev/null
|
||
|
||
docker_restart
|
||
|
||
echo "Docker已关闭v6访问"
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
iptables_open() {
|
||
iptables -P INPUT ACCEPT
|
||
iptables -P FORWARD ACCEPT
|
||
iptables -P OUTPUT ACCEPT
|
||
iptables -F
|
||
|
||
ip6tables -P INPUT ACCEPT
|
||
ip6tables -P FORWARD ACCEPT
|
||
ip6tables -P OUTPUT ACCEPT
|
||
ip6tables -F
|
||
|
||
}
|
||
|
||
|
||
|
||
add_swap() {
|
||
# 获取当前系统中所有的 swap 分区
|
||
swap_partitions=$(grep -E '^/dev/' /proc/swaps | awk '{print $1}')
|
||
|
||
# 遍历并删除所有的 swap 分区
|
||
for partition in $swap_partitions; do
|
||
swapoff "$partition"
|
||
wipefs -a "$partition" # 清除文件系统标识符
|
||
mkswap -f "$partition"
|
||
done
|
||
|
||
# 确保 /swapfile 不再被使用
|
||
swapoff /swapfile
|
||
|
||
# 删除旧的 /swapfile
|
||
rm -f /swapfile
|
||
|
||
# 创建新的 swap 分区
|
||
dd if=/dev/zero of=/swapfile bs=1M count=$new_swap
|
||
chmod 600 /swapfile
|
||
mkswap /swapfile
|
||
swapon /swapfile
|
||
|
||
if [ -f /etc/alpine-release ]; then
|
||
echo "/swapfile swap swap defaults 0 0" >> /etc/fstab
|
||
echo "nohup swapon /swapfile" >> /etc/local.d/swap.start
|
||
chmod +x /etc/local.d/swap.start
|
||
rc-update add local
|
||
else
|
||
echo "/swapfile swap swap defaults 0 0" >> /etc/fstab
|
||
fi
|
||
|
||
echo -e "虚拟内存大小已调整为${huang}${new_swap}${bai}MB"
|
||
}
|
||
|
||
cluster_python3() {
|
||
cd ~/cluster/
|
||
curl -sS -O https://raw.githubusercontent.com/kejilion/python-for-vps/main/cluster/$py_task
|
||
python3 ~/cluster/$py_task
|
||
}
|
||
|
||
tmux_run() {
|
||
# Check if the session already exists
|
||
tmux has-session -t $SESSION_NAME 2>/dev/null
|
||
# $? is a special variable that holds the exit status of the last executed command
|
||
if [ $? != 0 ]; then
|
||
# Session doesn't exist, create a new one
|
||
tmux new -s $SESSION_NAME
|
||
else
|
||
# Session exists, attach to it
|
||
tmux attach-session -t $SESSION_NAME
|
||
fi
|
||
}
|
||
|
||
|
||
f2b_status() {
|
||
docker restart fail2ban
|
||
sleep 3
|
||
docker exec -it fail2ban fail2ban-client status
|
||
}
|
||
|
||
f2b_status_xxx() {
|
||
docker exec -it fail2ban fail2ban-client status $xxx
|
||
}
|
||
|
||
f2b_install_sshd() {
|
||
|
||
docker run -d \
|
||
--name=fail2ban \
|
||
--net=host \
|
||
--cap-add=NET_ADMIN \
|
||
--cap-add=NET_RAW \
|
||
-e PUID=1000 \
|
||
-e PGID=1000 \
|
||
-e TZ=Etc/UTC \
|
||
-e VERBOSITY=-vv \
|
||
-v /path/to/fail2ban/config:/config \
|
||
-v /var/log:/var/log:ro \
|
||
--restart unless-stopped \
|
||
lscr.io/linuxserver/fail2ban:latest
|
||
|
||
sleep 3
|
||
if grep -q 'Alpine' /etc/issue; then
|
||
cd /path/to/fail2ban/config/fail2ban/filter.d
|
||
curl -sS -O https://raw.githubusercontent.com/kejilion/config/main/fail2ban/alpine-sshd.conf
|
||
curl -sS -O https://raw.githubusercontent.com/kejilion/config/main/fail2ban/alpine-sshd-ddos.conf
|
||
cd /path/to/fail2ban/config/fail2ban/jail.d/
|
||
curl -sS -O https://raw.githubusercontent.com/kejilion/config/main/fail2ban/alpine-ssh.conf
|
||
elif grep -qi 'CentOS' /etc/redhat-release; then
|
||
cd /path/to/fail2ban/config/fail2ban/jail.d/
|
||
curl -sS -O https://raw.githubusercontent.com/kejilion/config/main/fail2ban/centos-ssh.conf
|
||
else
|
||
install rsyslog
|
||
systemctl start rsyslog
|
||
systemctl enable rsyslog
|
||
cd /path/to/fail2ban/config/fail2ban/jail.d/
|
||
curl -sS -O https://raw.githubusercontent.com/kejilion/config/main/fail2ban/linux-ssh.conf
|
||
fi
|
||
}
|
||
|
||
f2b_sshd() {
|
||
if grep -q 'Alpine' /etc/issue; then
|
||
xxx=alpine-sshd
|
||
f2b_status_xxx
|
||
elif grep -qi 'CentOS' /etc/redhat-release; then
|
||
xxx=centos-sshd
|
||
f2b_status_xxx
|
||
else
|
||
xxx=linux-sshd
|
||
f2b_status_xxx
|
||
fi
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
server_reboot() {
|
||
|
||
read -p "$(echo -e "${huang}现在重启服务器吗?(Y/N): ${bai}")" rboot
|
||
case "$rboot" in
|
||
[Yy])
|
||
echo "已重启"
|
||
reboot
|
||
;;
|
||
[Nn])
|
||
echo "已取消"
|
||
;;
|
||
*)
|
||
echo "无效的选择,请输入 Y 或 N。"
|
||
;;
|
||
esac
|
||
|
||
|
||
}
|
||
|
||
output_status() {
|
||
output=$(awk 'BEGIN { rx_total = 0; tx_total = 0 }
|
||
NR > 2 { rx_total += $2; tx_total += $10 }
|
||
END {
|
||
rx_units = "Bytes";
|
||
tx_units = "Bytes";
|
||
if (rx_total > 1024) { rx_total /= 1024; rx_units = "KB"; }
|
||
if (rx_total > 1024) { rx_total /= 1024; rx_units = "MB"; }
|
||
if (rx_total > 1024) { rx_total /= 1024; rx_units = "GB"; }
|
||
|
||
if (tx_total > 1024) { tx_total /= 1024; tx_units = "KB"; }
|
||
if (tx_total > 1024) { tx_total /= 1024; tx_units = "MB"; }
|
||
if (tx_total > 1024) { tx_total /= 1024; tx_units = "GB"; }
|
||
|
||
printf("总接收: %.2f %s\n总发送: %.2f %s\n", rx_total, rx_units, tx_total, tx_units);
|
||
}' /proc/net/dev)
|
||
|
||
}
|
||
|
||
|
||
current_timezone() {
|
||
if grep -q 'Alpine' /etc/issue; then
|
||
date +"%Z %z"
|
||
else
|
||
timedatectl | grep "Time zone" | awk '{print $3}'
|
||
fi
|
||
|
||
}
|
||
|
||
|
||
set_timedate() {
|
||
shiqu="$1"
|
||
if grep -q 'Alpine' /etc/issue; then
|
||
install tzdata
|
||
cp /usr/share/zoneinfo/${shiqu} /etc/localtime
|
||
hwclock --systohc
|
||
else
|
||
timedatectl set-timezone ${shiqu}
|
||
fi
|
||
}
|
||
|
||
|
||
|
||
|
||
linux_update() {
|
||
if command -v dnf &>/dev/null; then
|
||
dnf -y update
|
||
elif command -v yum &>/dev/null; then
|
||
yum -y update
|
||
elif command -v apt &>/dev/null; then
|
||
DEBIAN_FRONTEND=noninteractive apt update -y
|
||
DEBIAN_FRONTEND=noninteractive apt full-upgrade -y
|
||
elif command -v apk &>/dev/null; then
|
||
apk update && apk upgrade
|
||
else
|
||
echo "未知的包管理器!"
|
||
return 1
|
||
fi
|
||
}
|
||
|
||
|
||
|
||
linux_clean() {
|
||
if command -v dnf &>/dev/null; then
|
||
dnf autoremove -y
|
||
dnf clean all
|
||
journalctl --rotate
|
||
journalctl --vacuum-time=1s
|
||
journalctl --vacuum-size=50M
|
||
dnf remove $(dnf repoquery --installonly --latest-limit=-1 -q) -y
|
||
elif command -v yum &>/dev/null; then
|
||
yum autoremove -y
|
||
yum clean all
|
||
journalctl --rotate
|
||
journalctl --vacuum-time=1s
|
||
journalctl --vacuum-size=50M
|
||
yum remove $(rpm -q kernel | grep -v $(uname -r)) -y
|
||
elif command -v apt &>/dev/null; then
|
||
apt autoremove --purge -y
|
||
apt clean -y
|
||
apt autoclean -y
|
||
apt remove --purge $(dpkg -l | awk '/^rc/ {print $2}') -y
|
||
journalctl --rotate
|
||
journalctl --vacuum-time=1s
|
||
journalctl --vacuum-size=50M
|
||
apt remove --purge $(dpkg -l | awk '/^ii linux-(image|headers)-[^ ]+/{print $2}' | grep -v $(uname -r | sed 's/-.*//') | xargs) -y
|
||
elif command -v apk &>/dev/null; then
|
||
apk del --purge $(apk info --installed | awk '{print $1}' | grep -v $(apk info --available | awk '{print $1}'))
|
||
apk autoremove
|
||
apk cache clean
|
||
rm -rf /var/log/*
|
||
rm -rf /var/cache/apk/*
|
||
else
|
||
echo "未知的包管理器!"
|
||
return 1
|
||
fi
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
bbr_on() {
|
||
|
||
cat > /etc/sysctl.conf << EOF
|
||
net.core.default_qdisc=fq_pie
|
||
net.ipv4.tcp_congestion_control=bbr
|
||
EOF
|
||
sysctl -p
|
||
|
||
}
|
||
|
||
|
||
set_dns() {
|
||
|
||
# 检查机器是否有IPv6地址
|
||
ipv6_available=0
|
||
if [[ $(ip -6 addr | grep -c "inet6") -gt 0 ]]; then
|
||
ipv6_available=1
|
||
fi
|
||
|
||
echo "nameserver $dns1_ipv4" > /etc/resolv.conf
|
||
echo "nameserver $dns2_ipv4" >> /etc/resolv.conf
|
||
|
||
|
||
if [[ $ipv6_available -eq 1 ]]; then
|
||
echo "nameserver $dns1_ipv6" >> /etc/resolv.conf
|
||
echo "nameserver $dns2_ipv6" >> /etc/resolv.conf
|
||
fi
|
||
|
||
echo "DNS地址已更新"
|
||
echo "------------------------"
|
||
cat /etc/resolv.conf
|
||
echo "------------------------"
|
||
|
||
}
|
||
|
||
|
||
restart_ssh() {
|
||
|
||
if command -v dnf &>/dev/null; then
|
||
systemctl restart sshd
|
||
elif command -v yum &>/dev/null; then
|
||
systemctl restart sshd
|
||
elif command -v apt &>/dev/null; then
|
||
service ssh restart
|
||
elif command -v apk &>/dev/null; then
|
||
service sshd restart
|
||
else
|
||
echo "未知的包管理器!"
|
||
return 1
|
||
fi
|
||
|
||
}
|
||
|
||
|
||
new_ssh_port() {
|
||
|
||
|
||
# 备份 SSH 配置文件
|
||
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
|
||
|
||
sed -i 's/^\s*#\?\s*Port/Port/' /etc/ssh/sshd_config
|
||
|
||
# 替换 SSH 配置文件中的端口号
|
||
sed -i "s/Port [0-9]\+/Port $new_port/g" /etc/ssh/sshd_config
|
||
|
||
rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/*
|
||
|
||
# 重启 SSH 服务
|
||
restart_ssh
|
||
echo "SSH 端口已修改为: $new_port"
|
||
|
||
iptables_open
|
||
remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1
|
||
|
||
}
|
||
|
||
|
||
|
||
add_sshkey() {
|
||
|
||
# ssh-keygen -t rsa -b 4096 -C "xxxx@gmail.com" -f /root/.ssh/sshkey -N ""
|
||
ssh-keygen -t ed25519 -C "xxxx@gmail.com" -f /root/.ssh/sshkey -N ""
|
||
|
||
cat ~/.ssh/sshkey.pub >> ~/.ssh/authorized_keys
|
||
chmod 600 ~/.ssh/authorized_keys
|
||
|
||
|
||
ip_address
|
||
echo -e "私钥信息已生成,务必复制保存,可保存成 ${huang}${ipv4_address}_ssh.key${bai} 文件,用于以后的SSH登录"
|
||
|
||
echo "--------------------------------"
|
||
cat ~/.ssh/sshkey
|
||
echo "--------------------------------"
|
||
|
||
sed -i -e 's/^\s*#\?\s*PermitRootLogin .*/PermitRootLogin prohibit-password/' \
|
||
-e 's/^\s*#\?\s*PasswordAuthentication .*/PasswordAuthentication no/' \
|
||
-e 's/^\s*#\?\s*PubkeyAuthentication .*/PubkeyAuthentication yes/' \
|
||
-e 's/^\s*#\?\s*ChallengeResponseAuthentication .*/ChallengeResponseAuthentication no/' /etc/ssh/sshd_config
|
||
rm -rf /etc/ssh/sshd_config.d/* /etc/ssh/ssh_config.d/*
|
||
echo -e "${lv}ROOT私钥登录已开启,已关闭ROOT密码登录,重连将会生效${bai}"
|
||
|
||
}
|
||
|
||
|
||
add_sshpasswd() {
|
||
|
||
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 "${lv}ROOT登录设置完毕!${bai}"
|
||
|
||
}
|
||
|
||
|
||
root_use() {
|
||
clear
|
||
[ "$EUID" -ne 0 ] && echo -e "${huang}请注意,该功能需要root用户才能运行!${bai}" && break_end && kejilion
|
||
}
|
||
|
||
|
||
|
||
dd_xitong() {
|
||
dd_xitong_1() {
|
||
echo -e "重装后初始用户名: ${huang}root${bai} 初始密码: ${huang}LeitboGi0ro${bai} 初始端口: ${huang}22${bai}"
|
||
echo -e "按任意键继续..."
|
||
read -n 1 -s -r -p ""
|
||
install wget
|
||
wget --no-check-certificate -qO InstallNET.sh 'https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh' && chmod a+x InstallNET.sh
|
||
}
|
||
|
||
dd_xitong_2() {
|
||
echo -e "重装后初始用户名: ${huang}Administrator${bai} 初始密码: ${huang}Teddysun.com${bai} 初始端口: ${huang}3389${bai}"
|
||
echo -e "按任意键继续..."
|
||
read -n 1 -s -r -p ""
|
||
install wget
|
||
wget --no-check-certificate -qO InstallNET.sh 'https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh' && chmod a+x InstallNET.sh
|
||
}
|
||
|
||
dd_xitong_3() {
|
||
echo -e "重装后初始用户名: ${huang}root${bai} 初始密码: ${huang}123@@@${bai} 初始端口: ${huang}22${bai}"
|
||
echo -e "按任意键继续..."
|
||
read -n 1 -s -r -p ""
|
||
curl -O https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh
|
||
}
|
||
|
||
dd_xitong_4() {
|
||
echo -e "重装后初始用户名: ${huang}Administrator${bai} 初始密码: ${huang}123@@@${bai} 初始端口: ${huang}3389${bai}"
|
||
echo -e "按任意键继续..."
|
||
read -n 1 -s -r -p ""
|
||
curl -O https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh
|
||
}
|
||
|
||
while true; do
|
||
root_use
|
||
echo "请备份数据,将为你重装系统,预计花费15分钟。"
|
||
echo -e "${hui}感谢MollyLau大佬和bin456789大佬的脚本支持!${bai} "
|
||
echo "------------------------"
|
||
echo "1. Debian 12"
|
||
echo "2. Debian 11"
|
||
echo "3. Debian 10"
|
||
echo "4. Debian 9"
|
||
echo "------------------------"
|
||
echo "11. Ubuntu 24.04"
|
||
echo "12. Ubuntu 22.04"
|
||
echo "13. Ubuntu 20.04"
|
||
echo "14. Ubuntu 18.04"
|
||
echo "------------------------"
|
||
echo "21. CentOS 9"
|
||
echo "22. CentOS 8"
|
||
echo "23. CentOS 7"
|
||
echo "------------------------"
|
||
echo "31. Alpine Linux"
|
||
echo "32. Rocky Linux"
|
||
echo "33. Alma Linux"
|
||
echo "34. Fedora Linux"
|
||
echo "------------------------"
|
||
echo "41. Windows 11"
|
||
echo "42. Windows 10"
|
||
echo "43. Windows 7"
|
||
echo "44. Windows Server 2022"
|
||
echo "45. Windows Server 2019"
|
||
echo "46. Windows Server 2016"
|
||
echo "------------------------"
|
||
echo "0. 返回上一级选单"
|
||
echo "------------------------"
|
||
read -p "请选择要重装的系统: " sys_choice
|
||
case "$sys_choice" in
|
||
1)
|
||
dd_xitong_1
|
||
bash InstallNET.sh -debian 12
|
||
reboot
|
||
exit
|
||
;;
|
||
2)
|
||
dd_xitong_1
|
||
bash InstallNET.sh -debian 11
|
||
reboot
|
||
exit
|
||
;;
|
||
3)
|
||
dd_xitong_1
|
||
bash InstallNET.sh -debian 10
|
||
reboot
|
||
exit
|
||
;;
|
||
4)
|
||
dd_xitong_1
|
||
bash InstallNET.sh -debian 9
|
||
reboot
|
||
exit
|
||
;;
|
||
11)
|
||
dd_xitong_1
|
||
bash InstallNET.sh -ubuntu 24.04
|
||
reboot
|
||
exit
|
||
;;
|
||
12)
|
||
dd_xitong_1
|
||
bash InstallNET.sh -ubuntu 22.04
|
||
reboot
|
||
exit
|
||
;;
|
||
13)
|
||
dd_xitong_1
|
||
bash InstallNET.sh -ubuntu 20.04
|
||
reboot
|
||
exit
|
||
;;
|
||
14)
|
||
dd_xitong_1
|
||
bash InstallNET.sh -ubuntu 18.04
|
||
reboot
|
||
exit
|
||
;;
|
||
21)
|
||
dd_xitong_1
|
||
bash InstallNET.sh -centos 9
|
||
reboot
|
||
exit
|
||
;;
|
||
22)
|
||
dd_xitong_1
|
||
bash InstallNET.sh -centos 8
|
||
reboot
|
||
exit
|
||
;;
|
||
23)
|
||
dd_xitong_1
|
||
bash InstallNET.sh -centos 7
|
||
reboot
|
||
exit
|
||
;;
|
||
31)
|
||
dd_xitong_1
|
||
bash InstallNET.sh -alpine
|
||
reboot
|
||
exit
|
||
;;
|
||
32)
|
||
dd_xitong_1
|
||
bash InstallNET.sh -rockylinux
|
||
reboot
|
||
exit
|
||
;;
|
||
33)
|
||
dd_xitong_3
|
||
bash reinstall.sh alma
|
||
reboot
|
||
exit
|
||
;;
|
||
34)
|
||
dd_xitong_3
|
||
bash reinstall.sh fedora
|
||
reboot
|
||
exit
|
||
;;
|
||
41)
|
||
dd_xitong_2
|
||
bash InstallNET.sh -windows 11 -lang "cn"
|
||
reboot
|
||
exit
|
||
;;
|
||
42)
|
||
dd_xitong_2
|
||
bash InstallNET.sh -windows 10 -lang "cn"
|
||
reboot
|
||
exit
|
||
;;
|
||
43)
|
||
dd_xitong_4
|
||
URL="https://massgrave.dev/windows_7_links"
|
||
web_content=$(wget -q -O - "$URL")
|
||
iso_link=$(echo "$web_content" | grep -oP '(?<=href=")[^"]*cn[^"]*windows_7[^"]*professional[^"]*x64[^"]*\.iso')
|
||
# bash reinstall.sh windows --image-name 'Windows 7 Professional' --lang zh-cn
|
||
# bash reinstall.sh windows --iso='$iso_link' --image-name='Windows 7 PROFESSIONAL'
|
||
bash reinstall.sh windows --iso="$iso_link" --image-name='Windows 7 PROFESSIONAL'
|
||
reboot
|
||
exit
|
||
;;
|
||
44)
|
||
dd_xitong_4
|
||
URL="https://massgrave.dev/windows_server_links"
|
||
web_content=$(wget -q -O - "$URL")
|
||
iso_link=$(echo "$web_content" | grep -oP '(?<=href=")[^"]*cn[^"]*windows_server[^"]*2022[^"]*x64[^"]*\.iso')
|
||
bash reinstall.sh windows --iso="$iso_link" --image-name='Windows Server 2022 SERVERDATACENTER'
|
||
reboot
|
||
exit
|
||
;;
|
||
45)
|
||
dd_xitong_2
|
||
bash InstallNET.sh -windows 2019 -lang "cn"
|
||
reboot
|
||
exit
|
||
;;
|
||
46)
|
||
dd_xitong_2
|
||
bash InstallNET.sh -windows 2016 -lang "cn"
|
||
reboot
|
||
exit
|
||
;;
|
||
0)
|
||
break
|
||
;;
|
||
*)
|
||
echo "无效的选择,请重新输入。"
|
||
break
|
||
;;
|
||
esac
|
||
done
|
||
}
|
||
|
||
|
||
bbrv3() {
|
||
root_use
|
||
if dpkg -l | grep -q 'linux-xanmod'; then
|
||
while true; do
|
||
|
||
kernel_version=$(uname -r)
|
||
echo "您已安装xanmod的BBRv3内核"
|
||
echo "当前内核版本: $kernel_version"
|
||
|
||
echo ""
|
||
echo "内核管理"
|
||
echo "------------------------"
|
||
echo "1. 更新BBRv3内核 2. 卸载BBRv3内核"
|
||
echo "------------------------"
|
||
echo "0. 返回上一级选单"
|
||
echo "------------------------"
|
||
read -p "请输入你的选择: " sub_choice
|
||
|
||
case $sub_choice in
|
||
1)
|
||
apt purge -y 'linux-*xanmod1*'
|
||
update-grub
|
||
|
||
# wget -qO - https://dl.xanmod.org/archive.key | gpg --dearmor -o /usr/share/keyrings/xanmod-archive-keyring.gpg --yes
|
||
wget -qO - https://raw.githubusercontent.com/kejilion/sh/main/archive.key | gpg --dearmor -o /usr/share/keyrings/xanmod-archive-keyring.gpg --yes
|
||
|
||
# 步骤3:添加存储库
|
||
echo 'deb [signed-by=/usr/share/keyrings/xanmod-archive-keyring.gpg] http://deb.xanmod.org releases main' | tee /etc/apt/sources.list.d/xanmod-release.list
|
||
|
||
# version=$(wget -q https://dl.xanmod.org/check_x86-64_psabi.sh && chmod +x check_x86-64_psabi.sh && ./check_x86-64_psabi.sh | grep -oP 'x86-64-v\K\d+|x86-64-v\d+')
|
||
version=$(wget -q https://raw.githubusercontent.com/kejilion/sh/main/check_x86-64_psabi.sh && chmod +x check_x86-64_psabi.sh && ./check_x86-64_psabi.sh | grep -oP 'x86-64-v\K\d+|x86-64-v\d+')
|
||
|
||
apt update -y
|
||
apt install -y linux-xanmod-x64v$version
|
||
|
||
echo "XanMod内核已更新。重启后生效"
|
||
rm -f /etc/apt/sources.list.d/xanmod-release.list
|
||
rm -f check_x86-64_psabi.sh*
|
||
|
||
server_reboot
|
||
|
||
;;
|
||
2)
|
||
apt purge -y 'linux-*xanmod1*'
|
||
update-grub
|
||
echo "XanMod内核已卸载。重启后生效"
|
||
server_reboot
|
||
;;
|
||
0)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
|
||
*)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
|
||
esac
|
||
done
|
||
else
|
||
|
||
clear
|
||
echo "请备份数据,将为你升级Linux内核开启BBR3"
|
||
echo "官网介绍: https://xanmod.org/"
|
||
echo "------------------------------------------------"
|
||
echo "仅支持Debian/Ubuntu 仅支持x86_64架构"
|
||
echo "VPS是512M内存的,请提前添加1G虚拟内存,防止因内存不足失联!"
|
||
echo "------------------------------------------------"
|
||
read -p "确定继续吗?(Y/N): " choice
|
||
|
||
case "$choice" in
|
||
[Yy])
|
||
if [ -r /etc/os-release ]; then
|
||
. /etc/os-release
|
||
if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then
|
||
echo "当前环境不支持,仅支持Debian和Ubuntu系统"
|
||
break
|
||
fi
|
||
else
|
||
echo "无法确定操作系统类型"
|
||
break
|
||
fi
|
||
|
||
# 检查系统架构
|
||
arch=$(dpkg --print-architecture)
|
||
if [ "$arch" != "amd64" ]; then
|
||
echo "当前环境不支持,仅支持x86_64架构"
|
||
break
|
||
fi
|
||
|
||
new_swap=1024
|
||
add_swap
|
||
install wget gnupg
|
||
|
||
# wget -qO - https://dl.xanmod.org/archive.key | gpg --dearmor -o /usr/share/keyrings/xanmod-archive-keyring.gpg --yes
|
||
wget -qO - https://raw.githubusercontent.com/kejilion/sh/main/archive.key | gpg --dearmor -o /usr/share/keyrings/xanmod-archive-keyring.gpg --yes
|
||
|
||
# 步骤3:添加存储库
|
||
echo 'deb [signed-by=/usr/share/keyrings/xanmod-archive-keyring.gpg] http://deb.xanmod.org releases main' | tee /etc/apt/sources.list.d/xanmod-release.list
|
||
|
||
# version=$(wget -q https://dl.xanmod.org/check_x86-64_psabi.sh && chmod +x check_x86-64_psabi.sh && ./check_x86-64_psabi.sh | grep -oP 'x86-64-v\K\d+|x86-64-v\d+')
|
||
version=$(wget -q https://raw.githubusercontent.com/kejilion/sh/main/check_x86-64_psabi.sh && chmod +x check_x86-64_psabi.sh && ./check_x86-64_psabi.sh | grep -oP 'x86-64-v\K\d+|x86-64-v\d+')
|
||
|
||
apt update -y
|
||
apt install -y linux-xanmod-x64v$version
|
||
|
||
# 步骤5:启用BBR3
|
||
cat > /etc/sysctl.conf << EOF
|
||
net.core.default_qdisc=fq_pie
|
||
net.ipv4.tcp_congestion_control=bbr
|
||
EOF
|
||
sysctl -p
|
||
echo "XanMod内核安装并BBR3启用成功。重启后生效"
|
||
rm -f /etc/apt/sources.list.d/xanmod-release.list
|
||
rm -f check_x86-64_psabi.sh*
|
||
server_reboot
|
||
|
||
;;
|
||
[Nn])
|
||
echo "已取消"
|
||
;;
|
||
*)
|
||
echo "无效的选择,请输入 Y 或 N。"
|
||
;;
|
||
esac
|
||
fi
|
||
|
||
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
kejilion_sh() {
|
||
while true; do
|
||
clear
|
||
|
||
echo -e "${kjlan}_ _ ____ _ _ _ _ ____ _ _ "
|
||
echo "|_/ |___ | | | | | | |\ | "
|
||
echo "| \_ |___ _| | |___ | |__| | \| "
|
||
echo " "
|
||
echo -e "${kjlan}科技lion一键脚本工具 v$sh_v (支持Ubuntu/Debian/CentOS/Alpine系统)${bai}"
|
||
echo -e "${kjlan}-输入${huang}k${kjlan}可快速启动此脚本-${bai}"
|
||
echo "------------------------"
|
||
echo "1. 系统信息查询"
|
||
echo "2. 系统更新"
|
||
echo "3. 系统清理"
|
||
echo "4. 常用工具 ▶"
|
||
echo "5. BBR管理 ▶"
|
||
echo "6. Docker管理 ▶ "
|
||
echo "7. WARP管理 ▶ "
|
||
echo "8. 测试脚本合集 ▶ "
|
||
echo "12. 我的工作区 ▶ "
|
||
echo "13. 系统工具 ▶ "
|
||
echo "14. VPS集群控制 ▶ "
|
||
echo "------------------------"
|
||
echo "00. 脚本更新"
|
||
echo "------------------------"
|
||
echo "0. 退出脚本"
|
||
echo "------------------------"
|
||
read -p "请输入你的选择: " choice
|
||
|
||
case $choice in
|
||
1)
|
||
clear
|
||
# 函数: 获取IPv4和IPv6地址
|
||
ip_address
|
||
|
||
if [ "$(uname -m)" == "x86_64" ]; then
|
||
cpu_info=$(cat /proc/cpuinfo | grep 'model name' | uniq | sed -e 's/model name[[:space:]]*: //')
|
||
else
|
||
cpu_info=$(lscpu | grep 'BIOS Model name' | awk -F': ' '{print $2}' | sed 's/^[ \t]*//')
|
||
fi
|
||
|
||
|
||
cpu_usage_percent=$(awk '{u=$2+$4; t=$2+$4+$5; if (NR==1){u1=u; t1=t;} else printf "%.0f\n", (($2+$4-u1) * 100 / (t-t1))}' \
|
||
<(grep 'cpu ' /proc/stat) <(sleep 1; grep 'cpu ' /proc/stat))
|
||
|
||
|
||
cpu_cores=$(nproc)
|
||
|
||
mem_info=$(free -b | awk 'NR==2{printf "%.2f/%.2f MB (%.2f%%)", $3/1024/1024, $2/1024/1024, $3*100/$2}')
|
||
|
||
disk_info=$(df -h | awk '$NF=="/"{printf "%s/%s (%s)", $3, $2, $5}')
|
||
|
||
country=$(curl -s ipinfo.io/country)
|
||
city=$(curl -s ipinfo.io/city)
|
||
|
||
isp_info=$(curl -s ipinfo.io/org)
|
||
|
||
cpu_arch=$(uname -m)
|
||
|
||
hostname=$(hostname)
|
||
|
||
kernel_version=$(uname -r)
|
||
|
||
congestion_algorithm=$(sysctl -n net.ipv4.tcp_congestion_control)
|
||
queue_algorithm=$(sysctl -n net.core.default_qdisc)
|
||
|
||
# 尝试使用 lsb_release 获取系统信息
|
||
os_info=$(lsb_release -ds 2>/dev/null)
|
||
|
||
# 如果 lsb_release 命令失败,则尝试其他方法
|
||
if [ -z "$os_info" ]; then
|
||
# 检查常见的发行文件
|
||
if [ -f "/etc/os-release" ]; then
|
||
os_info=$(source /etc/os-release && echo "$PRETTY_NAME")
|
||
elif [ -f "/etc/debian_version" ]; then
|
||
os_info="Debian $(cat /etc/debian_version)"
|
||
elif [ -f "/etc/redhat-release" ]; then
|
||
os_info=$(cat /etc/redhat-release)
|
||
else
|
||
os_info="Unknown"
|
||
fi
|
||
fi
|
||
|
||
output_status
|
||
|
||
current_time=$(date "+%Y-%m-%d %I:%M %p")
|
||
|
||
|
||
swap_used=$(free -m | awk 'NR==3{print $3}')
|
||
swap_total=$(free -m | awk 'NR==3{print $2}')
|
||
|
||
if [ "$swap_total" -eq 0 ]; then
|
||
swap_percentage=0
|
||
else
|
||
swap_percentage=$((swap_used * 100 / swap_total))
|
||
fi
|
||
|
||
swap_info="${swap_used}MB/${swap_total}MB (${swap_percentage}%)"
|
||
|
||
runtime=$(cat /proc/uptime | awk -F. '{run_days=int($1 / 86400);run_hours=int(($1 % 86400) / 3600);run_minutes=int(($1 % 3600) / 60); if (run_days > 0) printf("%d天 ", run_days); if (run_hours > 0) printf("%d时 ", run_hours); printf("%d分\n", run_minutes)}')
|
||
|
||
timezone=$(current_timezone)
|
||
|
||
|
||
echo ""
|
||
echo "系统信息查询"
|
||
echo "------------------------"
|
||
echo "主机名: $hostname"
|
||
echo "运营商: $isp_info"
|
||
echo "------------------------"
|
||
echo "系统版本: $os_info"
|
||
echo "Linux版本: $kernel_version"
|
||
echo "------------------------"
|
||
echo "CPU架构: $cpu_arch"
|
||
echo "CPU型号: $cpu_info"
|
||
echo "CPU核心数: $cpu_cores"
|
||
echo "------------------------"
|
||
echo "CPU占用: $cpu_usage_percent%"
|
||
echo "物理内存: $mem_info"
|
||
echo "虚拟内存: $swap_info"
|
||
echo "硬盘占用: $disk_info"
|
||
echo "------------------------"
|
||
echo "$output"
|
||
echo "------------------------"
|
||
echo "网络拥堵算法: $congestion_algorithm $queue_algorithm"
|
||
echo "------------------------"
|
||
echo "公网IPv4地址: $ipv4_address"
|
||
echo "公网IPv6地址: $ipv6_address"
|
||
echo "------------------------"
|
||
echo "地理位置: $country $city"
|
||
echo "系统时区: $timezone"
|
||
echo "系统时间: $current_time"
|
||
echo "------------------------"
|
||
echo "系统运行时长: $runtime"
|
||
echo
|
||
|
||
;;
|
||
|
||
2)
|
||
clear
|
||
linux_update
|
||
;;
|
||
|
||
3)
|
||
clear
|
||
linux_clean
|
||
;;
|
||
|
||
4)
|
||
while true; do
|
||
clear
|
||
echo "▶ 安装常用工具"
|
||
echo "------------------------"
|
||
echo "1. curl 下载工具"
|
||
echo "2. wget 下载工具"
|
||
echo "3. sudo 超级管理权限工具"
|
||
echo "4. socat 通信连接工具"
|
||
echo "5. htop 系统监控工具"
|
||
echo "6. iftop 网络流量监控工具"
|
||
echo "7. unzip ZIP压缩解压工具"
|
||
echo "8. tar GZ压缩解压工具"
|
||
echo "9. tmux 多路后台运行工具"
|
||
echo "10. ffmpeg 视频编码直播推流工具"
|
||
echo "11. btop 现代化监控工具"
|
||
echo "12. ranger 文件管理工具"
|
||
echo "13. gdu 磁盘占用查看工具"
|
||
echo "14. fzf 全局搜索工具"
|
||
echo "------------------------"
|
||
echo "21. cmatrix 黑客帝国屏保"
|
||
echo "22. sl 跑火车屏保"
|
||
echo "------------------------"
|
||
echo "26. 俄罗斯方块小游戏"
|
||
echo "27. 贪吃蛇小游戏"
|
||
echo "28. 太空入侵者小游戏"
|
||
echo "------------------------"
|
||
echo "31. 全部安装"
|
||
echo "32. 全部卸载"
|
||
echo "------------------------"
|
||
echo "41. 安装指定工具"
|
||
echo "42. 卸载指定工具"
|
||
echo "------------------------"
|
||
echo "0. 返回主菜单"
|
||
echo "------------------------"
|
||
read -p "请输入你的选择: " sub_choice
|
||
|
||
case $sub_choice in
|
||
1)
|
||
clear
|
||
install curl
|
||
clear
|
||
echo "工具已安装,使用方法如下:"
|
||
curl --help
|
||
;;
|
||
2)
|
||
clear
|
||
install wget
|
||
clear
|
||
echo "工具已安装,使用方法如下:"
|
||
wget --help
|
||
;;
|
||
3)
|
||
clear
|
||
install sudo
|
||
clear
|
||
echo "工具已安装,使用方法如下:"
|
||
sudo --help
|
||
;;
|
||
4)
|
||
clear
|
||
install socat
|
||
clear
|
||
echo "工具已安装,使用方法如下:"
|
||
socat -h
|
||
;;
|
||
5)
|
||
clear
|
||
install htop
|
||
clear
|
||
htop
|
||
;;
|
||
6)
|
||
clear
|
||
install iftop
|
||
clear
|
||
iftop
|
||
;;
|
||
7)
|
||
clear
|
||
install unzip
|
||
clear
|
||
echo "工具已安装,使用方法如下:"
|
||
unzip
|
||
;;
|
||
8)
|
||
clear
|
||
install tar
|
||
clear
|
||
echo "工具已安装,使用方法如下:"
|
||
tar --help
|
||
;;
|
||
9)
|
||
clear
|
||
install tmux
|
||
clear
|
||
echo "工具已安装,使用方法如下:"
|
||
tmux --help
|
||
;;
|
||
10)
|
||
clear
|
||
install ffmpeg
|
||
clear
|
||
echo "工具已安装,使用方法如下:"
|
||
ffmpeg --help
|
||
;;
|
||
|
||
11)
|
||
clear
|
||
install btop
|
||
clear
|
||
btop
|
||
;;
|
||
12)
|
||
clear
|
||
install ranger
|
||
cd /
|
||
clear
|
||
ranger
|
||
cd ~
|
||
;;
|
||
13)
|
||
clear
|
||
install gdu
|
||
cd /
|
||
clear
|
||
gdu
|
||
cd ~
|
||
;;
|
||
14)
|
||
clear
|
||
install fzf
|
||
cd /
|
||
clear
|
||
fzf
|
||
cd ~
|
||
;;
|
||
|
||
21)
|
||
clear
|
||
install cmatrix
|
||
clear
|
||
cmatrix
|
||
;;
|
||
22)
|
||
clear
|
||
install sl
|
||
clear
|
||
/usr/games/sl
|
||
;;
|
||
26)
|
||
clear
|
||
install bastet
|
||
clear
|
||
/usr/games/bastet
|
||
;;
|
||
27)
|
||
clear
|
||
install nsnake
|
||
clear
|
||
/usr/games/nsnake
|
||
;;
|
||
28)
|
||
clear
|
||
install ninvaders
|
||
clear
|
||
/usr/games/ninvaders
|
||
|
||
;;
|
||
|
||
31)
|
||
clear
|
||
install curl wget sudo socat htop iftop unzip tar tmux ffmpeg btop ranger gdu fzf cmatrix sl bastet nsnake ninvaders
|
||
;;
|
||
|
||
32)
|
||
clear
|
||
remove htop iftop unzip tmux ffmpeg btop ranger gdu fzf cmatrix sl bastet nsnake ninvaders
|
||
;;
|
||
|
||
41)
|
||
clear
|
||
read -p "请输入安装的工具名(wget curl sudo htop): " installname
|
||
install $installname
|
||
;;
|
||
42)
|
||
clear
|
||
read -p "请输入卸载的工具名(htop ufw tmux cmatrix): " removename
|
||
remove $removename
|
||
;;
|
||
|
||
0)
|
||
kejilion
|
||
|
||
;;
|
||
|
||
*)
|
||
echo "无效的输入!"
|
||
;;
|
||
esac
|
||
break_end
|
||
done
|
||
|
||
;;
|
||
|
||
5)
|
||
clear
|
||
if [ -f "/etc/alpine-release" ]; then
|
||
while true; do
|
||
clear
|
||
congestion_algorithm=$(sysctl -n net.ipv4.tcp_congestion_control)
|
||
queue_algorithm=$(sysctl -n net.core.default_qdisc)
|
||
echo "当前TCP阻塞算法: $congestion_algorithm $queue_algorithm"
|
||
|
||
echo ""
|
||
echo "BBR管理"
|
||
echo "------------------------"
|
||
echo "1. 开启BBRv3 2. 关闭BBRv3(会重启)"
|
||
echo "------------------------"
|
||
echo "0. 返回上一级选单"
|
||
echo "------------------------"
|
||
read -p "请输入你的选择: " sub_choice
|
||
|
||
case $sub_choice in
|
||
1)
|
||
bbr_on
|
||
|
||
;;
|
||
2)
|
||
sed -i '/net.core.default_qdisc=fq_pie/d' /etc/sysctl.conf
|
||
sed -i '/net.ipv4.tcp_congestion_control=bbr/d' /etc/sysctl.conf
|
||
sysctl -p
|
||
reboot
|
||
;;
|
||
0)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
|
||
*)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
|
||
esac
|
||
done
|
||
else
|
||
install wget
|
||
wget --no-check-certificate -O tcpx.sh https://raw.githubusercontent.com/ylx2016/Linux-NetSpeed/master/tcpx.sh
|
||
chmod +x tcpx.sh
|
||
./tcpx.sh
|
||
fi
|
||
|
||
;;
|
||
|
||
6)
|
||
while true; do
|
||
clear
|
||
echo "▶ Docker管理器"
|
||
echo "------------------------"
|
||
echo "1. 安装更新Docker环境"
|
||
echo "------------------------"
|
||
echo "2. 查看Docker全局状态"
|
||
echo "------------------------"
|
||
echo "3. Docker容器管理 ▶"
|
||
echo "4. Docker镜像管理 ▶"
|
||
echo "5. Docker网络管理 ▶"
|
||
echo "6. Docker卷管理 ▶"
|
||
echo "------------------------"
|
||
echo "7. 清理无用的docker容器和镜像网络数据卷"
|
||
echo "------------------------"
|
||
echo "8. 更换Docker源"
|
||
echo "9. 编辑daemon.json文件"
|
||
echo "------------------------"
|
||
echo "11. 开启Docker-ipv6访问"
|
||
echo "12. 关闭Docker-ipv6访问"
|
||
echo "------------------------"
|
||
echo "20. 卸载Docker环境"
|
||
echo "------------------------"
|
||
echo "0. 返回主菜单"
|
||
echo "------------------------"
|
||
read -p "请输入你的选择: " sub_choice
|
||
|
||
case $sub_choice in
|
||
1)
|
||
clear
|
||
install_add_docker
|
||
|
||
;;
|
||
2)
|
||
clear
|
||
echo "Docker版本"
|
||
docker -v
|
||
docker compose version
|
||
|
||
echo ""
|
||
echo "Docker镜像列表"
|
||
docker image ls
|
||
echo ""
|
||
echo "Docker容器列表"
|
||
docker ps -a
|
||
echo ""
|
||
echo "Docker卷列表"
|
||
docker volume ls
|
||
echo ""
|
||
echo "Docker网络列表"
|
||
docker network ls
|
||
echo ""
|
||
|
||
;;
|
||
3)
|
||
while true; do
|
||
clear
|
||
echo "Docker容器列表"
|
||
docker ps -a
|
||
echo ""
|
||
echo "容器操作"
|
||
echo "------------------------"
|
||
echo "1. 创建新的容器"
|
||
echo "------------------------"
|
||
echo "2. 启动指定容器 6. 启动所有容器"
|
||
echo "3. 停止指定容器 7. 暂停所有容器"
|
||
echo "4. 删除指定容器 8. 删除所有容器"
|
||
echo "5. 重启指定容器 9. 重启所有容器"
|
||
echo "------------------------"
|
||
echo "11. 进入指定容器 12. 查看容器日志 13. 查看容器网络"
|
||
echo "------------------------"
|
||
echo "0. 返回上一级选单"
|
||
echo "------------------------"
|
||
read -p "请输入你的选择: " sub_choice
|
||
|
||
case $sub_choice in
|
||
1)
|
||
read -p "请输入创建命令: " dockername
|
||
$dockername
|
||
;;
|
||
|
||
2)
|
||
read -p "请输入容器名: " dockername
|
||
docker start $dockername
|
||
;;
|
||
3)
|
||
read -p "请输入容器名: " dockername
|
||
docker stop $dockername
|
||
;;
|
||
4)
|
||
read -p "请输入容器名: " dockername
|
||
docker rm -f $dockername
|
||
;;
|
||
5)
|
||
read -p "请输入容器名: " dockername
|
||
docker restart $dockername
|
||
;;
|
||
6)
|
||
docker start $(docker ps -a -q)
|
||
;;
|
||
7)
|
||
docker stop $(docker ps -q)
|
||
;;
|
||
8)
|
||
read -p "$(echo -e "${hong}确定删除所有容器吗?(Y/N): ${bai}")" choice
|
||
case "$choice" in
|
||
[Yy])
|
||
docker rm -f $(docker ps -a -q)
|
||
;;
|
||
[Nn])
|
||
;;
|
||
*)
|
||
echo "无效的选择,请输入 Y 或 N。"
|
||
;;
|
||
esac
|
||
;;
|
||
9)
|
||
docker restart $(docker ps -q)
|
||
;;
|
||
11)
|
||
read -p "请输入容器名: " dockername
|
||
docker exec -it $dockername /bin/sh
|
||
break_end
|
||
;;
|
||
12)
|
||
read -p "请输入容器名: " dockername
|
||
docker logs $dockername
|
||
break_end
|
||
;;
|
||
13)
|
||
echo ""
|
||
container_ids=$(docker ps -q)
|
||
|
||
echo "------------------------------------------------------------"
|
||
printf "%-25s %-25s %-25s\n" "容器名称" "网络名称" "IP地址"
|
||
|
||
for container_id in $container_ids; do
|
||
container_info=$(docker inspect --format '{{ .Name }}{{ range $network, $config := .NetworkSettings.Networks }} {{ $network }} {{ $config.IPAddress }}{{ end }}' "$container_id")
|
||
|
||
container_name=$(echo "$container_info" | awk '{print $1}')
|
||
network_info=$(echo "$container_info" | cut -d' ' -f2-)
|
||
|
||
while IFS= read -r line; do
|
||
network_name=$(echo "$line" | awk '{print $1}')
|
||
ip_address=$(echo "$line" | awk '{print $2}')
|
||
|
||
printf "%-20s %-20s %-15s\n" "$container_name" "$network_name" "$ip_address"
|
||
done <<< "$network_info"
|
||
done
|
||
|
||
break_end
|
||
;;
|
||
|
||
0)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
|
||
*)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
4)
|
||
while true; do
|
||
clear
|
||
echo "Docker镜像列表"
|
||
docker image ls
|
||
echo ""
|
||
echo "镜像操作"
|
||
echo "------------------------"
|
||
echo "1. 获取指定镜像 3. 删除指定镜像"
|
||
echo "2. 更新指定镜像 4. 删除所有镜像"
|
||
echo "------------------------"
|
||
echo "0. 返回上一级选单"
|
||
echo "------------------------"
|
||
read -p "请输入你的选择: " sub_choice
|
||
|
||
case $sub_choice in
|
||
1)
|
||
read -p "请输入镜像名: " dockername
|
||
docker pull $dockername
|
||
;;
|
||
2)
|
||
read -p "请输入镜像名: " dockername
|
||
docker pull $dockername
|
||
;;
|
||
3)
|
||
read -p "请输入镜像名: " dockername
|
||
docker rmi -f $dockername
|
||
;;
|
||
4)
|
||
read -p "$(echo -e "${hong}确定删除所有镜像吗?(Y/N): ${bai}")" choice
|
||
case "$choice" in
|
||
[Yy])
|
||
docker rmi -f $(docker images -q)
|
||
;;
|
||
[Nn])
|
||
|
||
;;
|
||
*)
|
||
echo "无效的选择,请输入 Y 或 N。"
|
||
;;
|
||
esac
|
||
;;
|
||
0)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
|
||
*)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
|
||
5)
|
||
while true; do
|
||
clear
|
||
echo "Docker网络列表"
|
||
echo "------------------------------------------------------------"
|
||
docker network ls
|
||
echo ""
|
||
|
||
echo "------------------------------------------------------------"
|
||
container_ids=$(docker ps -q)
|
||
printf "%-25s %-25s %-25s\n" "容器名称" "网络名称" "IP地址"
|
||
|
||
for container_id in $container_ids; do
|
||
container_info=$(docker inspect --format '{{ .Name }}{{ range $network, $config := .NetworkSettings.Networks }} {{ $network }} {{ $config.IPAddress }}{{ end }}' "$container_id")
|
||
|
||
container_name=$(echo "$container_info" | awk '{print $1}')
|
||
network_info=$(echo "$container_info" | cut -d' ' -f2-)
|
||
|
||
while IFS= read -r line; do
|
||
network_name=$(echo "$line" | awk '{print $1}')
|
||
ip_address=$(echo "$line" | awk '{print $2}')
|
||
|
||
printf "%-20s %-20s %-15s\n" "$container_name" "$network_name" "$ip_address"
|
||
done <<< "$network_info"
|
||
done
|
||
|
||
echo ""
|
||
echo "网络操作"
|
||
echo "------------------------"
|
||
echo "1. 创建网络"
|
||
echo "2. 加入网络"
|
||
echo "3. 退出网络"
|
||
echo "4. 删除网络"
|
||
echo "------------------------"
|
||
echo "0. 返回上一级选单"
|
||
echo "------------------------"
|
||
read -p "请输入你的选择: " sub_choice
|
||
|
||
case $sub_choice in
|
||
1)
|
||
read -p "设置新网络名: " dockernetwork
|
||
docker network create $dockernetwork
|
||
;;
|
||
2)
|
||
read -p "加入网络名: " dockernetwork
|
||
read -p "那些容器加入该网络: " dockername
|
||
docker network connect $dockernetwork $dockername
|
||
echo ""
|
||
;;
|
||
3)
|
||
read -p "退出网络名: " dockernetwork
|
||
read -p "那些容器退出该网络: " dockername
|
||
docker network disconnect $dockernetwork $dockername
|
||
echo ""
|
||
;;
|
||
|
||
4)
|
||
read -p "请输入要删除的网络名: " dockernetwork
|
||
docker network rm $dockernetwork
|
||
;;
|
||
0)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
|
||
*)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
|
||
6)
|
||
while true; do
|
||
clear
|
||
echo "Docker卷列表"
|
||
docker volume ls
|
||
echo ""
|
||
echo "卷操作"
|
||
echo "------------------------"
|
||
echo "1. 创建新卷"
|
||
echo "2. 删除卷"
|
||
echo "------------------------"
|
||
echo "0. 返回上一级选单"
|
||
echo "------------------------"
|
||
read -p "请输入你的选择: " sub_choice
|
||
|
||
case $sub_choice in
|
||
1)
|
||
read -p "设置新卷名: " dockerjuan
|
||
docker volume create $dockerjuan
|
||
|
||
;;
|
||
2)
|
||
read -p "输入删除卷名: " dockerjuan
|
||
docker volume rm $dockerjuan
|
||
|
||
;;
|
||
0)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
|
||
*)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
7)
|
||
clear
|
||
read -p "$(echo -e "${huang}确定清理无用的镜像容器网络吗?(Y/N): ${bai}")" choice
|
||
case "$choice" in
|
||
[Yy])
|
||
docker system prune -af --volumes
|
||
;;
|
||
[Nn])
|
||
;;
|
||
*)
|
||
echo "无效的选择,请输入 Y 或 N。"
|
||
;;
|
||
esac
|
||
;;
|
||
8)
|
||
clear
|
||
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
|
||
;;
|
||
|
||
9)
|
||
clear
|
||
install nano
|
||
mkdir -p /etc/docker && nano /etc/docker/daemon.json
|
||
if command -v dnf &>/dev/null || command -v yum &>/dev/null; then
|
||
systemctl restart docker
|
||
else
|
||
service docker restart
|
||
fi
|
||
;;
|
||
|
||
11)
|
||
clear
|
||
docker_ipv6_on
|
||
;;
|
||
|
||
12)
|
||
clear
|
||
docker_ipv6_off
|
||
;;
|
||
|
||
20)
|
||
clear
|
||
read -p "$(echo -e "${hong}确定卸载docker环境吗?(Y/N): ${bai}")" choice
|
||
case "$choice" in
|
||
[Yy])
|
||
docker rm $(docker ps -a -q) && docker rmi $(docker images -q) && docker network prune
|
||
remove docker > /dev/null 2>&1
|
||
;;
|
||
[Nn])
|
||
;;
|
||
*)
|
||
echo "无效的选择,请输入 Y 或 N。"
|
||
;;
|
||
esac
|
||
;;
|
||
|
||
0)
|
||
kejilion
|
||
;;
|
||
*)
|
||
echo "无效的输入!"
|
||
;;
|
||
esac
|
||
break_end
|
||
|
||
|
||
done
|
||
|
||
;;
|
||
|
||
|
||
7)
|
||
clear
|
||
install wget
|
||
wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh [option] [lisence/url/token]
|
||
;;
|
||
|
||
8)
|
||
while true; do
|
||
clear
|
||
echo "▶ 测试脚本合集"
|
||
echo ""
|
||
echo "----IP及解锁状态检测-----------"
|
||
echo "1. ChatGPT解锁状态检测"
|
||
echo "2. Region流媒体解锁测试"
|
||
echo "3. yeahwu流媒体解锁检测"
|
||
echo "4. xykt_IP质量体检脚本"
|
||
echo ""
|
||
echo "----网络线路测速-----------"
|
||
echo "11. besttrace三网回程延迟路由测试"
|
||
echo "12. mtr_trace三网回程线路测试"
|
||
echo "13. Superspeed三网测速"
|
||
echo "14. nxtrace快速回程测试脚本"
|
||
echo "15. nxtrace指定IP回程测试脚本"
|
||
echo "16. ludashi2020三网线路测试"
|
||
echo "17. i-abc多功能测速脚本"
|
||
echo ""
|
||
echo "----硬件性能测试----------"
|
||
echo "21. yabs性能测试"
|
||
echo "22. icu/gb5 CPU性能测试脚本"
|
||
echo ""
|
||
echo "----综合性测试-----------"
|
||
echo "31. bench性能测试"
|
||
echo "32. spiritysdx融合怪测评"
|
||
echo ""
|
||
echo "------------------------"
|
||
echo "0. 返回主菜单"
|
||
echo "------------------------"
|
||
read -p "请输入你的选择: " sub_choice
|
||
|
||
case $sub_choice in
|
||
1)
|
||
clear
|
||
bash <(curl -Ls https://cdn.jsdelivr.net/gh/missuo/OpenAI-Checker/openai.sh)
|
||
;;
|
||
2)
|
||
clear
|
||
bash <(curl -L -s check.unlock.media)
|
||
;;
|
||
3)
|
||
clear
|
||
install wget
|
||
wget -qO- https://github.com/yeahwu/check/raw/main/check.sh | bash
|
||
;;
|
||
4)
|
||
clear
|
||
bash <(curl -Ls IP.Check.Place)
|
||
;;
|
||
11)
|
||
clear
|
||
install wget
|
||
wget -qO- git.io/besttrace | bash
|
||
;;
|
||
12)
|
||
clear
|
||
curl https://raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh | bash
|
||
;;
|
||
13)
|
||
clear
|
||
bash <(curl -Lso- https://git.io/superspeed_uxh)
|
||
;;
|
||
14)
|
||
clear
|
||
curl nxtrace.org/nt |bash
|
||
nexttrace --fast-trace --tcp
|
||
;;
|
||
15)
|
||
clear
|
||
|
||
echo "可参考的IP列表"
|
||
echo "------------------------"
|
||
echo "北京电信: 219.141.136.12"
|
||
echo "北京联通: 202.106.50.1"
|
||
echo "北京移动: 221.179.155.161"
|
||
echo "上海电信: 202.96.209.133"
|
||
echo "上海联通: 210.22.97.1"
|
||
echo "上海移动: 211.136.112.200"
|
||
echo "广州电信: 58.60.188.222"
|
||
echo "广州联通: 210.21.196.6"
|
||
echo "广州移动: 120.196.165.24"
|
||
echo "成都电信: 61.139.2.69"
|
||
echo "成都联通: 119.6.6.6"
|
||
echo "成都移动: 211.137.96.205"
|
||
echo "湖南电信: 36.111.200.100"
|
||
echo "湖南联通: 42.48.16.100"
|
||
echo "湖南移动: 39.134.254.6"
|
||
echo "------------------------"
|
||
|
||
read -p "输入一个指定IP: " testip
|
||
curl nxtrace.org/nt |bash
|
||
nexttrace $testip
|
||
;;
|
||
|
||
16)
|
||
clear
|
||
curl https://raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh
|
||
;;
|
||
|
||
17)
|
||
clear
|
||
bash <(curl -sL bash.icu/speedtest)
|
||
;;
|
||
|
||
|
||
21)
|
||
clear
|
||
new_swap=1024
|
||
add_swap
|
||
curl -sL yabs.sh | bash -s -- -i -5
|
||
;;
|
||
22)
|
||
clear
|
||
new_swap=1024
|
||
add_swap
|
||
bash <(curl -sL bash.icu/gb5)
|
||
;;
|
||
|
||
31)
|
||
clear
|
||
curl -Lso- bench.sh | bash
|
||
;;
|
||
32)
|
||
clear
|
||
curl -L https://gitlab.com/spiritysdx/za/-/raw/main/ecs.sh -o ecs.sh && chmod +x ecs.sh && bash ecs.sh
|
||
;;
|
||
|
||
|
||
0)
|
||
kejilion
|
||
|
||
;;
|
||
*)
|
||
echo "无效的输入!"
|
||
;;
|
||
esac
|
||
break_end
|
||
|
||
done
|
||
;;
|
||
|
||
12)
|
||
while true; do
|
||
clear
|
||
echo "▶ 我的工作区"
|
||
echo "系统将为你提供可以后台常驻运行的工作区,你可以用来执行长时间的任务"
|
||
echo "即使你断开SSH,工作区中的任务也不会中断,后台常驻任务。"
|
||
echo -e "${huang}注意: 进入工作区后使用Ctrl+b再单独按d,退出工作区!${bai}"
|
||
echo "------------------------"
|
||
echo "1. 1号工作区"
|
||
echo "2. 2号工作区"
|
||
echo "3. 3号工作区"
|
||
echo "4. 4号工作区"
|
||
echo "5. 5号工作区"
|
||
echo "6. 6号工作区"
|
||
echo "7. 7号工作区"
|
||
echo "8. 8号工作区"
|
||
echo "9. 9号工作区"
|
||
echo "10. 10号工作区"
|
||
echo "11. 自定义工作区"
|
||
echo "------------------------"
|
||
echo "99. 工作区状态管理"
|
||
echo "------------------------"
|
||
echo "0. 返回主菜单"
|
||
echo "------------------------"
|
||
read -p "请输入你的选择: " sub_choice
|
||
|
||
case $sub_choice in
|
||
|
||
1)
|
||
clear
|
||
install tmux
|
||
SESSION_NAME="work1"
|
||
tmux_run
|
||
|
||
;;
|
||
2)
|
||
clear
|
||
install tmux
|
||
SESSION_NAME="work2"
|
||
tmux_run
|
||
;;
|
||
3)
|
||
clear
|
||
install tmux
|
||
SESSION_NAME="work3"
|
||
tmux_run
|
||
;;
|
||
4)
|
||
clear
|
||
install tmux
|
||
SESSION_NAME="work4"
|
||
tmux_run
|
||
;;
|
||
5)
|
||
clear
|
||
install tmux
|
||
SESSION_NAME="work5"
|
||
tmux_run
|
||
;;
|
||
6)
|
||
clear
|
||
install tmux
|
||
SESSION_NAME="work6"
|
||
tmux_run
|
||
;;
|
||
7)
|
||
clear
|
||
install tmux
|
||
SESSION_NAME="work7"
|
||
tmux_run
|
||
;;
|
||
8)
|
||
clear
|
||
install tmux
|
||
SESSION_NAME="work8"
|
||
tmux_run
|
||
;;
|
||
9)
|
||
clear
|
||
install tmux
|
||
SESSION_NAME="work9"
|
||
tmux_run
|
||
;;
|
||
10)
|
||
clear
|
||
install tmux
|
||
SESSION_NAME="work10"
|
||
tmux_run
|
||
;;
|
||
|
||
11)
|
||
clear
|
||
install tmux
|
||
clear
|
||
echo "当前已存在的工作区列表"
|
||
echo "------------------------"
|
||
tmux list-sessions
|
||
echo "------------------------"
|
||
read -p "请输入您自定义的工作区名称,如1001 kj001 work10: " SESSION_NAME
|
||
tmux_run
|
||
;;
|
||
|
||
99)
|
||
while true; do
|
||
clear
|
||
echo "当前已存在的工作区列表"
|
||
echo "------------------------"
|
||
tmux list-sessions
|
||
echo "------------------------"
|
||
|
||
read -p "1. 删除指定工作区 0. 退出: " gongzuoqu_del
|
||
case "$gongzuoqu_del" in
|
||
1)
|
||
read -p "请输入要删除的工作区名称: " gongzuoqu_name
|
||
tmux kill-window -t $gongzuoqu_name
|
||
;;
|
||
0)
|
||
break
|
||
;;
|
||
*)
|
||
echo "无效的选择,请输入 Y 或 N。"
|
||
;;
|
||
esac
|
||
done
|
||
|
||
;;
|
||
0)
|
||
kejilion
|
||
;;
|
||
*)
|
||
echo "无效的输入!"
|
||
;;
|
||
esac
|
||
break_end
|
||
|
||
done
|
||
;;
|
||
|
||
13)
|
||
while true; do
|
||
clear
|
||
echo "▶ 系统工具"
|
||
echo "------------------------"
|
||
echo "1. 设置脚本启动快捷键 2. 修改登录密码"
|
||
echo "3. ROOT密码登录模式 4. 安装Python指定版本"
|
||
echo "5. 开放所有端口 6. 修改SSH连接端口"
|
||
echo "7. 优化DNS地址 8. 一键重装系统"
|
||
echo "9. 禁用ROOT账户创建新账户 10. 切换优先ipv4/ipv6"
|
||
echo "------------------------"
|
||
echo "11. 查看端口占用状态 12. 修改虚拟内存大小"
|
||
echo "13. 用户管理 14. 用户/密码生成器"
|
||
echo "15. 系统时区调整 16. 设置BBR3加速"
|
||
echo "17. 防火墙高级管理器 18. 修改主机名"
|
||
echo "19. 切换系统更新源 20. 定时任务管理"
|
||
echo "------------------------"
|
||
echo "21. 本机host解析 22. fail2banSSH防御程序"
|
||
echo "23. 限流自动关机 24. ROOT私钥登录模式"
|
||
echo "25. TG-bot系统监控预警 26. 修复OoenSSH高危漏洞(岫源)"
|
||
echo "------------------------"
|
||
echo "31. 留言板 66. 一条龙系统调优"
|
||
echo "------------------------"
|
||
echo "99. 重启服务器"
|
||
echo "------------------------"
|
||
echo "0. 返回主菜单"
|
||
echo "------------------------"
|
||
read -p "请输入你的选择: " sub_choice
|
||
|
||
case $sub_choice in
|
||
1)
|
||
clear
|
||
read -p "请输入你的快捷按键: " kuaijiejian
|
||
echo "alias $kuaijiejian='~/kejilion.sh'" >> ~/.bashrc
|
||
source ~/.bashrc
|
||
echo "快捷键已设置"
|
||
;;
|
||
|
||
2)
|
||
clear
|
||
echo "设置你的登录密码"
|
||
passwd
|
||
;;
|
||
3)
|
||
root_use
|
||
add_sshpasswd
|
||
;;
|
||
|
||
4)
|
||
root_use
|
||
VERSION=$(python3 -V 2>&1 | awk '{print $2}')
|
||
echo -e "当前python版本号: ${huang}$VERSION${bai}"
|
||
echo "------------"
|
||
echo "推荐版本: 3.12 3.11 3.10 3.9 3.8 2.7"
|
||
echo "查询更多版本: https://www.python.org/downloads/"
|
||
echo "------------"
|
||
read -p "输入你要安装的python版本号: " py_new_v
|
||
|
||
if ! grep -q 'export PYENV_ROOT="\$HOME/.pyenv"' ~/.bashrc; then
|
||
if command -v yum &>/dev/null; then
|
||
yum update -y && yum install git -y
|
||
yum groupinstall "Development Tools" -y
|
||
yum install openssl-devel bzip2-devel libffi-devel ncurses-devel zlib-devel readline-devel sqlite-devel xz-devel findutils -y
|
||
|
||
curl -O https://www.openssl.org/source/openssl-1.1.1u.tar.gz
|
||
tar -xzf openssl-1.1.1u.tar.gz
|
||
cd openssl-1.1.1u
|
||
./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib
|
||
make
|
||
make install
|
||
echo "/usr/local/openssl/lib" > /etc/ld.so.conf.d/openssl-1.1.1u.conf
|
||
ldconfig -v
|
||
cd ..
|
||
|
||
export LDFLAGS="-L/usr/local/openssl/lib"
|
||
export CPPFLAGS="-I/usr/local/openssl/include"
|
||
export PKG_CONFIG_PATH="/usr/local/openssl/lib/pkgconfig"
|
||
|
||
elif command -v apt &>/dev/null; then
|
||
apt update -y && apt install git -y
|
||
apt install build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev libgdbm-dev libnss3-dev libedit-dev -y
|
||
elif command -v apk &>/dev/null; then
|
||
apk update && apk add git
|
||
apk add --no-cache bash gcc musl-dev libffi-dev openssl-dev bzip2-dev zlib-dev readline-dev sqlite-dev libc6-compat linux-headers make xz-dev build-base ncurses-dev
|
||
else
|
||
echo "未知的包管理器!"
|
||
return 1
|
||
fi
|
||
|
||
curl https://pyenv.run | bash
|
||
cat << EOF >> ~/.bashrc
|
||
|
||
export PYENV_ROOT="\$HOME/.pyenv"
|
||
if [[ -d "\$PYENV_ROOT/bin" ]]; then
|
||
export PATH="\$PYENV_ROOT/bin:\$PATH"
|
||
fi
|
||
eval "\$(pyenv init --path)"
|
||
eval "\$(pyenv init -)"
|
||
eval "\$(pyenv virtualenv-init -)"
|
||
|
||
EOF
|
||
|
||
fi
|
||
|
||
sleep 1
|
||
source ~/.bashrc
|
||
sleep 1
|
||
pyenv install $py_new_v
|
||
pyenv global $py_new_v
|
||
|
||
rm -rf /tmp/python-build.*
|
||
rm -rf $(pyenv root)/cache/*
|
||
|
||
VERSION=$(python -V 2>&1 | awk '{print $2}')
|
||
echo -e "当前python版本号: ${huang}$VERSION${bai}"
|
||
|
||
;;
|
||
|
||
5)
|
||
root_use
|
||
iptables_open
|
||
remove iptables-persistent ufw firewalld iptables-services > /dev/null 2>&1
|
||
echo "端口已全部开放"
|
||
|
||
;;
|
||
6)
|
||
root_use
|
||
|
||
# 去掉 #Port 的注释
|
||
sed -i 's/#Port/Port/' /etc/ssh/sshd_config
|
||
|
||
# 读取当前的 SSH 端口号
|
||
current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}')
|
||
|
||
# 打印当前的 SSH 端口号
|
||
echo "当前的 SSH 端口号是: $current_port"
|
||
|
||
echo "------------------------"
|
||
|
||
# 提示用户输入新的 SSH 端口号
|
||
read -p "请输入新的 SSH 端口号: " new_port
|
||
|
||
new_ssh_port
|
||
|
||
;;
|
||
|
||
|
||
7)
|
||
root_use
|
||
echo "当前DNS地址"
|
||
echo "------------------------"
|
||
cat /etc/resolv.conf
|
||
echo "------------------------"
|
||
echo ""
|
||
# 询问用户是否要优化DNS设置
|
||
read -p "是否要设置DNS地址?(y/n): " choice
|
||
|
||
if [ "$choice" == "y" ]; then
|
||
read -p "1. 国外DNS优化 2. 国内DNS优化 0. 退出 : " Limiting
|
||
|
||
case "$Limiting" in
|
||
1)
|
||
|
||
dns1_ipv4="1.1.1.1"
|
||
dns2_ipv4="8.8.8.8"
|
||
dns1_ipv6="2606:4700:4700::1111"
|
||
dns2_ipv6="2001:4860:4860::8888"
|
||
set_dns
|
||
;;
|
||
|
||
2)
|
||
dns1_ipv4="223.5.5.5"
|
||
dns2_ipv4="183.60.83.19"
|
||
dns1_ipv6="2400:3200::1"
|
||
dns2_ipv6="2400:da00::6666"
|
||
set_dns
|
||
;;
|
||
0)
|
||
echo "已取消"
|
||
;;
|
||
*)
|
||
echo "无效的选择,请输入 Y 或 N。"
|
||
;;
|
||
esac
|
||
|
||
|
||
else
|
||
echo "DNS设置未更改"
|
||
fi
|
||
|
||
;;
|
||
|
||
8)
|
||
dd_xitong
|
||
;;
|
||
9)
|
||
root_use
|
||
|
||
# 提示用户输入新用户名
|
||
read -p "请输入新用户名: " new_username
|
||
|
||
# 创建新用户并设置密码
|
||
useradd -m -s /bin/bash "$new_username"
|
||
passwd "$new_username"
|
||
|
||
# 赋予新用户sudo权限
|
||
echo "$new_username ALL=(ALL:ALL) ALL" | sudo tee -a /etc/sudoers
|
||
|
||
# 禁用ROOT用户登录
|
||
passwd -l root
|
||
|
||
echo "操作已完成。"
|
||
;;
|
||
|
||
|
||
10)
|
||
root_use
|
||
ipv6_disabled=$(sysctl -n net.ipv6.conf.all.disable_ipv6)
|
||
|
||
echo ""
|
||
if [ "$ipv6_disabled" -eq 1 ]; then
|
||
echo "当前网络优先级设置: IPv4 优先"
|
||
else
|
||
echo "当前网络优先级设置: IPv6 优先"
|
||
fi
|
||
echo "------------------------"
|
||
|
||
echo ""
|
||
echo "切换的网络优先级"
|
||
echo "------------------------"
|
||
echo "1. IPv4 优先 2. IPv6 优先"
|
||
echo "------------------------"
|
||
read -p "选择优先的网络: " choice
|
||
|
||
case $choice in
|
||
1)
|
||
sysctl -w net.ipv6.conf.all.disable_ipv6=1 > /dev/null 2>&1
|
||
echo "已切换为 IPv4 优先"
|
||
;;
|
||
2)
|
||
sysctl -w net.ipv6.conf.all.disable_ipv6=0 > /dev/null 2>&1
|
||
echo "已切换为 IPv6 优先"
|
||
;;
|
||
*)
|
||
echo "无效的选择"
|
||
;;
|
||
|
||
esac
|
||
;;
|
||
|
||
11)
|
||
clear
|
||
ss -tulnape
|
||
;;
|
||
|
||
12)
|
||
|
||
|
||
root_use
|
||
# 获取当前交换空间信息
|
||
swap_used=$(free -m | awk 'NR==3{print $3}')
|
||
swap_total=$(free -m | awk 'NR==3{print $2}')
|
||
|
||
if [ "$swap_total" -eq 0 ]; then
|
||
swap_percentage=0
|
||
else
|
||
swap_percentage=$((swap_used * 100 / swap_total))
|
||
fi
|
||
|
||
swap_info="${swap_used}MB/${swap_total}MB (${swap_percentage}%)"
|
||
|
||
echo "当前虚拟内存: $swap_info"
|
||
|
||
read -p "是否调整大小?(Y/N): " choice
|
||
|
||
case "$choice" in
|
||
[Yy])
|
||
# 输入新的虚拟内存大小
|
||
read -p "请输入虚拟内存大小MB: " new_swap
|
||
add_swap
|
||
|
||
;;
|
||
[Nn])
|
||
echo "已取消"
|
||
;;
|
||
*)
|
||
echo "无效的选择,请输入 Y 或 N。"
|
||
;;
|
||
esac
|
||
;;
|
||
|
||
13)
|
||
while true; do
|
||
root_use
|
||
|
||
# 显示所有用户、用户权限、用户组和是否在sudoers中
|
||
echo "用户列表"
|
||
echo "----------------------------------------------------------------------------"
|
||
printf "%-24s %-34s %-20s %-10s\n" "用户名" "用户权限" "用户组" "sudo权限"
|
||
while IFS=: read -r username _ userid groupid _ _ homedir shell; do
|
||
groups=$(groups "$username" | cut -d : -f 2)
|
||
sudo_status=$(sudo -n -lU "$username" 2>/dev/null | grep -q '(ALL : ALL)' && echo "Yes" || echo "No")
|
||
printf "%-20s %-30s %-20s %-10s\n" "$username" "$homedir" "$groups" "$sudo_status"
|
||
done < /etc/passwd
|
||
|
||
|
||
echo ""
|
||
echo "账户操作"
|
||
echo "------------------------"
|
||
echo "1. 创建普通账户 2. 创建高级账户"
|
||
echo "------------------------"
|
||
echo "3. 赋予最高权限 4. 取消最高权限"
|
||
echo "------------------------"
|
||
echo "5. 删除账号"
|
||
echo "------------------------"
|
||
echo "0. 返回上一级选单"
|
||
echo "------------------------"
|
||
read -p "请输入你的选择: " sub_choice
|
||
|
||
case $sub_choice in
|
||
1)
|
||
# 提示用户输入新用户名
|
||
read -p "请输入新用户名: " new_username
|
||
|
||
# 创建新用户并设置密码
|
||
useradd -m -s /bin/bash "$new_username"
|
||
passwd "$new_username"
|
||
|
||
echo "操作已完成。"
|
||
;;
|
||
|
||
2)
|
||
# 提示用户输入新用户名
|
||
read -p "请输入新用户名: " new_username
|
||
|
||
# 创建新用户并设置密码
|
||
useradd -m -s /bin/bash "$new_username"
|
||
passwd "$new_username"
|
||
|
||
# 赋予新用户sudo权限
|
||
echo "$new_username ALL=(ALL:ALL) ALL" | sudo tee -a /etc/sudoers
|
||
|
||
echo "操作已完成。"
|
||
|
||
;;
|
||
3)
|
||
read -p "请输入用户名: " username
|
||
# 赋予新用户sudo权限
|
||
echo "$username ALL=(ALL:ALL) ALL" | sudo tee -a /etc/sudoers
|
||
;;
|
||
4)
|
||
read -p "请输入用户名: " username
|
||
# 从sudoers文件中移除用户的sudo权限
|
||
sed -i "/^$username\sALL=(ALL:ALL)\sALL/d" /etc/sudoers
|
||
|
||
;;
|
||
5)
|
||
read -p "请输入要删除的用户名: " username
|
||
# 删除用户及其主目录
|
||
userdel -r "$username"
|
||
;;
|
||
|
||
0)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
|
||
*)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
|
||
14)
|
||
clear
|
||
|
||
echo "随机用户名"
|
||
echo "------------------------"
|
||
for i in {1..5}; do
|
||
username="user$(< /dev/urandom tr -dc _a-z0-9 | head -c6)"
|
||
echo "随机用户名 $i: $username"
|
||
done
|
||
|
||
echo ""
|
||
echo "随机姓名"
|
||
echo "------------------------"
|
||
first_names=("John" "Jane" "Michael" "Emily" "David" "Sophia" "William" "Olivia" "James" "Emma" "Ava" "Liam" "Mia" "Noah" "Isabella")
|
||
last_names=("Smith" "Johnson" "Brown" "Davis" "Wilson" "Miller" "Jones" "Garcia" "Martinez" "Williams" "Lee" "Gonzalez" "Rodriguez" "Hernandez")
|
||
|
||
# 生成5个随机用户姓名
|
||
for i in {1..5}; do
|
||
first_name_index=$((RANDOM % ${#first_names[@]}))
|
||
last_name_index=$((RANDOM % ${#last_names[@]}))
|
||
user_name="${first_names[$first_name_index]} ${last_names[$last_name_index]}"
|
||
echo "随机用户姓名 $i: $user_name"
|
||
done
|
||
|
||
echo ""
|
||
echo "随机UUID"
|
||
echo "------------------------"
|
||
for i in {1..5}; do
|
||
uuid=$(cat /proc/sys/kernel/random/uuid)
|
||
echo "随机UUID $i: $uuid"
|
||
done
|
||
|
||
echo ""
|
||
echo "16位随机密码"
|
||
echo "------------------------"
|
||
for i in {1..5}; do
|
||
password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c16)
|
||
echo "随机密码 $i: $password"
|
||
done
|
||
|
||
echo ""
|
||
echo "32位随机密码"
|
||
echo "------------------------"
|
||
for i in {1..5}; do
|
||
password=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c32)
|
||
echo "随机密码 $i: $password"
|
||
done
|
||
echo ""
|
||
|
||
;;
|
||
|
||
15)
|
||
root_use
|
||
while true; do
|
||
|
||
echo "系统时间信息"
|
||
|
||
# 获取当前系统时区
|
||
timezone=$(current_timezone)
|
||
|
||
# 获取当前系统时间
|
||
current_time=$(date +"%Y-%m-%d %H:%M:%S")
|
||
|
||
# 显示时区和时间
|
||
echo "当前系统时区:$timezone"
|
||
echo "当前系统时间:$current_time"
|
||
|
||
echo ""
|
||
echo "时区切换"
|
||
echo "亚洲------------------------"
|
||
echo "1. 中国上海时间 2. 中国香港时间"
|
||
echo "3. 日本东京时间 4. 韩国首尔时间"
|
||
echo "5. 新加坡时间 6. 印度加尔各答时间"
|
||
echo "7. 阿联酋迪拜时间 8. 澳大利亚悉尼时间"
|
||
echo "欧洲------------------------"
|
||
echo "11. 英国伦敦时间 12. 法国巴黎时间"
|
||
echo "13. 德国柏林时间 14. 俄罗斯莫斯科时间"
|
||
echo "15. 荷兰尤特赖赫特时间 16. 西班牙马德里时间"
|
||
echo "美洲------------------------"
|
||
echo "21. 美国西部时间 22. 美国东部时间"
|
||
echo "23. 加拿大时间 24. 墨西哥时间"
|
||
echo "25. 巴西时间 26. 阿根廷时间"
|
||
echo "------------------------"
|
||
echo "0. 返回上一级选单"
|
||
echo "------------------------"
|
||
read -p "请输入你的选择: " sub_choice
|
||
|
||
|
||
case $sub_choice in
|
||
1) set_timedate Asia/Shanghai ;;
|
||
2) set_timedate Asia/Hong_Kong ;;
|
||
3) set_timedate Asia/Tokyo ;;
|
||
4) set_timedate Asia/Seoul ;;
|
||
5) set_timedate Asia/Singapore ;;
|
||
6) set_timedate Asia/Kolkata ;;
|
||
7) set_timedate Asia/Dubai ;;
|
||
8) set_timedate Australia/Sydney ;;
|
||
11) set_timedate Europe/London ;;
|
||
12) set_timedate Europe/Paris ;;
|
||
13) set_timedate Europe/Berlin ;;
|
||
14) set_timedate Europe/Moscow ;;
|
||
15) set_timedate Europe/Amsterdam ;;
|
||
16) set_timedate Europe/Madrid ;;
|
||
21) set_timedate America/Los_Angeles ;;
|
||
22) set_timedate America/New_York ;;
|
||
23) set_timedate America/Vancouver ;;
|
||
24) set_timedate America/Mexico_City ;;
|
||
25) set_timedate America/Sao_Paulo ;;
|
||
26) set_timedate America/Argentina/Buenos_Aires ;;
|
||
0) break ;; # 跳出循环,退出菜单
|
||
*) break ;; # 跳出循环,退出菜单
|
||
esac
|
||
done
|
||
;;
|
||
|
||
16)
|
||
bbrv3
|
||
;;
|
||
|
||
17)
|
||
root_use
|
||
if dpkg -l | grep -q iptables-persistent; then
|
||
while true; do
|
||
echo "防火墙已安装"
|
||
echo "------------------------"
|
||
iptables -L INPUT
|
||
|
||
echo ""
|
||
echo "防火墙管理"
|
||
echo "------------------------"
|
||
echo "1. 开放指定端口 2. 关闭指定端口"
|
||
echo "3. 开放所有端口 4. 关闭所有端口"
|
||
echo "------------------------"
|
||
echo "5. IP白名单 6. IP黑名单"
|
||
echo "7. 清除指定IP"
|
||
echo "------------------------"
|
||
echo "9. 卸载防火墙"
|
||
echo "------------------------"
|
||
echo "0. 返回上一级选单"
|
||
echo "------------------------"
|
||
read -p "请输入你的选择: " sub_choice
|
||
|
||
case $sub_choice in
|
||
1)
|
||
read -p "请输入开放的端口号: " o_port
|
||
sed -i "/COMMIT/i -A INPUT -p tcp --dport $o_port -j ACCEPT" /etc/iptables/rules.v4
|
||
sed -i "/COMMIT/i -A INPUT -p udp --dport $o_port -j ACCEPT" /etc/iptables/rules.v4
|
||
iptables-restore < /etc/iptables/rules.v4
|
||
|
||
;;
|
||
2)
|
||
read -p "请输入关闭的端口号: " c_port
|
||
sed -i "/--dport $c_port/d" /etc/iptables/rules.v4
|
||
iptables-restore < /etc/iptables/rules.v4
|
||
;;
|
||
|
||
3)
|
||
current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}')
|
||
|
||
cat > /etc/iptables/rules.v4 << EOF
|
||
*filter
|
||
:INPUT ACCEPT [0:0]
|
||
:FORWARD ACCEPT [0:0]
|
||
:OUTPUT ACCEPT [0:0]
|
||
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
|
||
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
|
||
-A INPUT -i lo -j ACCEPT
|
||
-A FORWARD -i lo -j ACCEPT
|
||
-A INPUT -p tcp --dport $current_port -j ACCEPT
|
||
COMMIT
|
||
EOF
|
||
iptables-restore < /etc/iptables/rules.v4
|
||
|
||
;;
|
||
4)
|
||
current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}')
|
||
|
||
cat > /etc/iptables/rules.v4 << EOF
|
||
*filter
|
||
:INPUT DROP [0:0]
|
||
:FORWARD DROP [0:0]
|
||
:OUTPUT ACCEPT [0:0]
|
||
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
|
||
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
|
||
-A INPUT -i lo -j ACCEPT
|
||
-A FORWARD -i lo -j ACCEPT
|
||
-A INPUT -p tcp --dport $current_port -j ACCEPT
|
||
COMMIT
|
||
EOF
|
||
iptables-restore < /etc/iptables/rules.v4
|
||
|
||
;;
|
||
|
||
5)
|
||
read -p "请输入放行的IP: " o_ip
|
||
sed -i "/COMMIT/i -A INPUT -s $o_ip -j ACCEPT" /etc/iptables/rules.v4
|
||
iptables-restore < /etc/iptables/rules.v4
|
||
|
||
;;
|
||
|
||
6)
|
||
read -p "请输入封锁的IP: " c_ip
|
||
sed -i "/COMMIT/i -A INPUT -s $c_ip -j DROP" /etc/iptables/rules.v4
|
||
iptables-restore < /etc/iptables/rules.v4
|
||
;;
|
||
|
||
7)
|
||
read -p "请输入清除的IP: " d_ip
|
||
sed -i "/-A INPUT -s $d_ip/d" /etc/iptables/rules.v4
|
||
iptables-restore < /etc/iptables/rules.v4
|
||
;;
|
||
|
||
9)
|
||
remove iptables-persistent
|
||
rm /etc/iptables/rules.v4
|
||
break
|
||
;;
|
||
|
||
0)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
|
||
*)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
|
||
esac
|
||
done
|
||
else
|
||
|
||
clear
|
||
echo "将为你安装防火墙,该防火墙仅支持Debian/Ubuntu"
|
||
echo "------------------------------------------------"
|
||
read -p "确定继续吗?(Y/N): " choice
|
||
|
||
case "$choice" in
|
||
[Yy])
|
||
if [ -r /etc/os-release ]; then
|
||
. /etc/os-release
|
||
if [ "$ID" != "debian" ] && [ "$ID" != "ubuntu" ]; then
|
||
echo "当前环境不支持,仅支持Debian和Ubuntu系统"
|
||
break
|
||
fi
|
||
else
|
||
echo "无法确定操作系统类型"
|
||
break
|
||
fi
|
||
|
||
clear
|
||
iptables_open
|
||
remove iptables-persistent ufw
|
||
rm /etc/iptables/rules.v4
|
||
|
||
apt update -y && apt install -y iptables-persistent
|
||
|
||
current_port=$(grep -E '^ *Port [0-9]+' /etc/ssh/sshd_config | awk '{print $2}')
|
||
|
||
cat > /etc/iptables/rules.v4 << EOF
|
||
*filter
|
||
:INPUT DROP [0:0]
|
||
:FORWARD DROP [0:0]
|
||
:OUTPUT ACCEPT [0:0]
|
||
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
|
||
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
|
||
-A INPUT -i lo -j ACCEPT
|
||
-A FORWARD -i lo -j ACCEPT
|
||
-A INPUT -p tcp --dport $current_port -j ACCEPT
|
||
COMMIT
|
||
EOF
|
||
|
||
iptables-restore < /etc/iptables/rules.v4
|
||
systemctl enable netfilter-persistent
|
||
echo "防火墙安装完成"
|
||
|
||
|
||
;;
|
||
[Nn])
|
||
echo "已取消"
|
||
;;
|
||
*)
|
||
echo "无效的选择,请输入 Y 或 N。"
|
||
;;
|
||
esac
|
||
fi
|
||
;;
|
||
|
||
18)
|
||
root_use
|
||
current_hostname=$(hostname)
|
||
echo "当前主机名: $current_hostname"
|
||
read -p "是否要更改主机名?(y/n): " answer
|
||
if [[ "${answer,,}" == "y" ]]; then
|
||
# 获取新的主机名
|
||
read -p "请输入新的主机名: " new_hostname
|
||
if [ -n "$new_hostname" ]; then
|
||
if [ -f /etc/alpine-release ]; then
|
||
# Alpine
|
||
echo "$new_hostname" > /etc/hostname
|
||
hostname "$new_hostname"
|
||
else
|
||
# 其他系统,如 Debian, Ubuntu, CentOS 等
|
||
hostnamectl set-hostname "$new_hostname"
|
||
sed -i "s/$current_hostname/$new_hostname/g" /etc/hostname
|
||
systemctl restart systemd-hostnamed
|
||
fi
|
||
echo "主机名已更改为: $new_hostname"
|
||
else
|
||
echo "无效的主机名。未更改主机名。"
|
||
exit 1
|
||
fi
|
||
else
|
||
echo "未更改主机名。"
|
||
fi
|
||
;;
|
||
|
||
19)
|
||
root_use
|
||
# 获取系统信息
|
||
source /etc/os-release
|
||
|
||
# 定义 Ubuntu 更新源
|
||
aliyun_ubuntu_source="http://mirrors.aliyun.com/ubuntu/"
|
||
official_ubuntu_source="http://archive.ubuntu.com/ubuntu/"
|
||
initial_ubuntu_source=""
|
||
|
||
# 定义 Debian 更新源
|
||
aliyun_debian_source="http://mirrors.aliyun.com/debian/"
|
||
official_debian_source="http://deb.debian.org/debian/"
|
||
initial_debian_source=""
|
||
|
||
# 定义 CentOS 更新源
|
||
aliyun_centos_source="http://mirrors.aliyun.com/centos/"
|
||
official_centos_source="http://mirror.centos.org/centos/"
|
||
initial_centos_source=""
|
||
|
||
# 获取当前更新源并设置初始源
|
||
case "$ID" in
|
||
ubuntu)
|
||
initial_ubuntu_source=$(grep -E '^deb ' /etc/apt/sources.list | head -n 1 | awk '{print $2}')
|
||
;;
|
||
debian)
|
||
initial_debian_source=$(grep -E '^deb ' /etc/apt/sources.list | head -n 1 | awk '{print $2}')
|
||
;;
|
||
centos)
|
||
initial_centos_source=$(awk -F= '/^baseurl=/ {print $2}' /etc/yum.repos.d/CentOS-Base.repo | head -n 1 | tr -d ' ')
|
||
;;
|
||
*)
|
||
echo "未知系统,无法执行切换源脚本"
|
||
exit 1
|
||
;;
|
||
esac
|
||
|
||
# 备份当前源
|
||
backup_sources() {
|
||
case "$ID" in
|
||
ubuntu)
|
||
cp /etc/apt/sources.list /etc/apt/sources.list.bak
|
||
;;
|
||
debian)
|
||
cp /etc/apt/sources.list /etc/apt/sources.list.bak
|
||
;;
|
||
centos)
|
||
if [ ! -f /etc/yum.repos.d/CentOS-Base.repo.bak ]; then
|
||
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
|
||
else
|
||
echo "备份已存在,无需重复备份"
|
||
fi
|
||
;;
|
||
*)
|
||
echo "未知系统,无法执行备份操作"
|
||
exit 1
|
||
;;
|
||
esac
|
||
echo "已备份当前更新源为 /etc/apt/sources.list.bak 或 /etc/yum.repos.d/CentOS-Base.repo.bak"
|
||
}
|
||
|
||
# 还原初始更新源
|
||
restore_initial_source() {
|
||
case "$ID" in
|
||
ubuntu)
|
||
cp /etc/apt/sources.list.bak /etc/apt/sources.list
|
||
;;
|
||
debian)
|
||
cp /etc/apt/sources.list.bak /etc/apt/sources.list
|
||
;;
|
||
centos)
|
||
cp /etc/yum.repos.d/CentOS-Base.repo.bak /etc/yum.repos.d/CentOS-Base.repo
|
||
;;
|
||
*)
|
||
echo "未知系统,无法执行还原操作"
|
||
exit 1
|
||
;;
|
||
esac
|
||
echo "已还原初始更新源"
|
||
}
|
||
|
||
# 函数:切换更新源
|
||
switch_source() {
|
||
case "$ID" in
|
||
ubuntu)
|
||
sed -i 's|'"$initial_ubuntu_source"'|'"$1"'|g' /etc/apt/sources.list
|
||
;;
|
||
debian)
|
||
sed -i 's|'"$initial_debian_source"'|'"$1"'|g' /etc/apt/sources.list
|
||
;;
|
||
centos)
|
||
sed -i "s|^baseurl=.*$|baseurl=$1|g" /etc/yum.repos.d/CentOS-Base.repo
|
||
;;
|
||
*)
|
||
echo "未知系统,无法执行切换操作"
|
||
exit 1
|
||
;;
|
||
esac
|
||
}
|
||
|
||
# 主菜单
|
||
while true; do
|
||
case "$ID" in
|
||
ubuntu)
|
||
echo "Ubuntu 更新源切换脚本"
|
||
echo "------------------------"
|
||
;;
|
||
debian)
|
||
echo "Debian 更新源切换脚本"
|
||
echo "------------------------"
|
||
;;
|
||
centos)
|
||
echo "CentOS 更新源切换脚本"
|
||
echo "------------------------"
|
||
;;
|
||
*)
|
||
echo "未知系统,无法执行脚本"
|
||
exit 1
|
||
;;
|
||
esac
|
||
|
||
echo "1. 切换到阿里云源"
|
||
echo "2. 切换到官方源"
|
||
echo "------------------------"
|
||
echo "3. 备份当前更新源"
|
||
echo "4. 还原初始更新源"
|
||
echo "------------------------"
|
||
echo "0. 返回上一级"
|
||
echo "------------------------"
|
||
read -p "请选择操作: " choice
|
||
|
||
case $choice in
|
||
1)
|
||
backup_sources
|
||
case "$ID" in
|
||
ubuntu)
|
||
switch_source $aliyun_ubuntu_source
|
||
;;
|
||
debian)
|
||
switch_source $aliyun_debian_source
|
||
;;
|
||
centos)
|
||
switch_source $aliyun_centos_source
|
||
;;
|
||
*)
|
||
echo "未知系统,无法执行切换操作"
|
||
exit 1
|
||
;;
|
||
esac
|
||
echo "已切换到阿里云源"
|
||
;;
|
||
2)
|
||
backup_sources
|
||
case "$ID" in
|
||
ubuntu)
|
||
switch_source $official_ubuntu_source
|
||
;;
|
||
debian)
|
||
switch_source $official_debian_source
|
||
;;
|
||
centos)
|
||
switch_source $official_centos_source
|
||
;;
|
||
*)
|
||
echo "未知系统,无法执行切换操作"
|
||
exit 1
|
||
;;
|
||
esac
|
||
echo "已切换到官方源"
|
||
;;
|
||
3)
|
||
backup_sources
|
||
case "$ID" in
|
||
ubuntu)
|
||
switch_source $initial_ubuntu_source
|
||
;;
|
||
debian)
|
||
switch_source $initial_debian_source
|
||
;;
|
||
centos)
|
||
switch_source $initial_centos_source
|
||
;;
|
||
*)
|
||
echo "未知系统,无法执行切换操作"
|
||
exit 1
|
||
;;
|
||
esac
|
||
echo "已切换到初始更新源"
|
||
;;
|
||
4)
|
||
restore_initial_source
|
||
;;
|
||
0)
|
||
break
|
||
;;
|
||
*)
|
||
echo "无效的选择,请重新输入"
|
||
;;
|
||
esac
|
||
break_end
|
||
|
||
done
|
||
|
||
;;
|
||
|
||
20)
|
||
|
||
while true; do
|
||
clear
|
||
echo "定时任务列表"
|
||
crontab -l
|
||
echo ""
|
||
echo "操作"
|
||
echo "------------------------"
|
||
echo "1. 添加定时任务 2. 删除定时任务 3. 编辑定时任务"
|
||
echo "------------------------"
|
||
echo "0. 返回上一级选单"
|
||
echo "------------------------"
|
||
read -p "请输入你的选择: " sub_choice
|
||
|
||
case $sub_choice in
|
||
1)
|
||
read -p "请输入新任务的执行命令: " newquest
|
||
echo "------------------------"
|
||
echo "1. 每月任务 2. 每周任务"
|
||
echo "3. 每天任务 4. 每小时任务"
|
||
echo "------------------------"
|
||
read -p "请输入你的选择: " dingshi
|
||
|
||
case $dingshi in
|
||
1)
|
||
read -p "选择每月的几号执行任务? (1-30): " day
|
||
(crontab -l ; echo "0 0 $day * * $newquest") | crontab - > /dev/null 2>&1
|
||
;;
|
||
2)
|
||
read -p "选择周几执行任务? (0-6,0代表星期日): " weekday
|
||
(crontab -l ; echo "0 0 * * $weekday $newquest") | crontab - > /dev/null 2>&1
|
||
;;
|
||
3)
|
||
read -p "选择每天几点执行任务?(小时,0-23): " hour
|
||
(crontab -l ; echo "0 $hour * * * $newquest") | crontab - > /dev/null 2>&1
|
||
;;
|
||
4)
|
||
read -p "输入每小时的第几分钟执行任务?(分钟,0-60): " minute
|
||
(crontab -l ; echo "$minute * * * * $newquest") | crontab - > /dev/null 2>&1
|
||
;;
|
||
*)
|
||
break # 跳出
|
||
;;
|
||
esac
|
||
;;
|
||
2)
|
||
read -p "请输入需要删除任务的关键字: " kquest
|
||
crontab -l | grep -v "$kquest" | crontab -
|
||
;;
|
||
3)
|
||
crontab -e
|
||
;;
|
||
0)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
|
||
*)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
esac
|
||
done
|
||
|
||
;;
|
||
|
||
21)
|
||
root_use
|
||
while true; do
|
||
echo "本机host解析列表"
|
||
echo "如果你在这里添加解析匹配,将不再使用动态解析了"
|
||
cat /etc/hosts
|
||
echo ""
|
||
echo "操作"
|
||
echo "------------------------"
|
||
echo "1. 添加新的解析 2. 删除解析地址"
|
||
echo "------------------------"
|
||
echo "0. 返回上一级选单"
|
||
echo "------------------------"
|
||
read -p "请输入你的选择: " host_dns
|
||
|
||
case $host_dns in
|
||
1)
|
||
read -p "请输入新的解析记录 格式: 110.25.5.33 kejilion.pro : " addhost
|
||
echo "$addhost" >> /etc/hosts
|
||
|
||
;;
|
||
2)
|
||
read -p "请输入需要删除的解析内容关键字: " delhost
|
||
sed -i "/$delhost/d" /etc/hosts
|
||
;;
|
||
0)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
|
||
*)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
esac
|
||
done
|
||
;;
|
||
|
||
22)
|
||
root_use
|
||
if docker inspect fail2ban &>/dev/null ; then
|
||
while true; do
|
||
clear
|
||
echo "SSH防御程序已启动"
|
||
echo "------------------------"
|
||
echo "1. 查看SSH拦截记录"
|
||
echo "2. 日志实时监控"
|
||
echo "------------------------"
|
||
echo "9. 卸载防御程序"
|
||
echo "------------------------"
|
||
echo "0. 退出"
|
||
echo "------------------------"
|
||
read -p "请输入你的选择: " sub_choice
|
||
case $sub_choice in
|
||
|
||
1)
|
||
echo "------------------------"
|
||
f2b_sshd
|
||
echo "------------------------"
|
||
;;
|
||
2)
|
||
tail -f /path/to/fail2ban/config/log/fail2ban/fail2ban.log
|
||
break
|
||
;;
|
||
9)
|
||
docker rm -f fail2ban
|
||
rm -rf /path/to/fail2ban
|
||
echo "Fail2Ban防御程序已卸载"
|
||
|
||
break
|
||
;;
|
||
0)
|
||
break
|
||
;;
|
||
*)
|
||
echo "无效的选择,请重新输入。"
|
||
;;
|
||
esac
|
||
break_end
|
||
|
||
done
|
||
|
||
elif [ -x "$(command -v fail2ban-client)" ] ; then
|
||
clear
|
||
echo "卸载旧版fail2ban"
|
||
read -p "确定继续吗?(Y/N): " choice
|
||
case "$choice" in
|
||
[Yy])
|
||
remove fail2ban
|
||
rm -rf /etc/fail2ban
|
||
echo "Fail2Ban防御程序已卸载"
|
||
;;
|
||
[Nn])
|
||
echo "已取消"
|
||
;;
|
||
*)
|
||
echo "无效的选择,请输入 Y 或 N。"
|
||
;;
|
||
esac
|
||
|
||
else
|
||
|
||
clear
|
||
echo "fail2ban是一个SSH防止暴力破解工具"
|
||
echo "官网介绍: https://github.com/fail2ban/fail2ban"
|
||
echo "------------------------------------------------"
|
||
echo "工作原理:研判非法IP恶意高频访问SSH端口,自动进行IP封锁"
|
||
echo "------------------------------------------------"
|
||
read -p "确定继续吗?(Y/N): " choice
|
||
|
||
case "$choice" in
|
||
[Yy])
|
||
clear
|
||
install_docker
|
||
f2b_install_sshd
|
||
|
||
cd ~
|
||
f2b_status
|
||
echo "Fail2Ban防御程序已开启"
|
||
|
||
;;
|
||
[Nn])
|
||
echo "已取消"
|
||
;;
|
||
*)
|
||
echo "无效的选择,请输入 Y 或 N。"
|
||
;;
|
||
esac
|
||
fi
|
||
;;
|
||
|
||
|
||
23)
|
||
root_use
|
||
echo "当前流量使用情况,重启服务器流量计算会清零!"
|
||
output_status
|
||
echo "$output"
|
||
|
||
# 检查是否存在 Limiting_Shut_down.sh 文件
|
||
if [ -f ~/Limiting_Shut_down.sh ]; then
|
||
# 获取 threshold_gb 的值
|
||
threshold_gb=$(grep -oP 'threshold_gb=\K\d+' ~/Limiting_Shut_down.sh)
|
||
echo -e "当前设置的限流阈值为 ${hang}${threshold_gb}${bai}GB"
|
||
else
|
||
echo -e "${hui}前未启用限流关机功能${bai}"
|
||
fi
|
||
|
||
echo
|
||
echo "------------------------------------------------"
|
||
echo "系统每分钟会检测实际流量是否到达阈值,到达后会自动关闭服务器!每月1日重置流量重启服务器。"
|
||
read -p "1. 开启限流关机功能 2. 停用限流关机功能 0. 退出 : " Limiting
|
||
|
||
case "$Limiting" in
|
||
1)
|
||
# 输入新的虚拟内存大小
|
||
echo "如果实际服务器就100G流量,可设置阈值为95G,提前关机,以免出现流量误差或溢出."
|
||
read -p "请输入流量阈值(单位为GB): " threshold_gb
|
||
cd ~
|
||
curl -Ss -O https://raw.githubusercontent.com/kejilion/sh/main/Limiting_Shut_down.sh
|
||
chmod +x ~/Limiting_Shut_down.sh
|
||
sed -i "s/110/$threshold_gb/g" ~/Limiting_Shut_down.sh
|
||
crontab -l | grep -v '~/Limiting_Shut_down.sh' | crontab -
|
||
(crontab -l ; echo "* * * * * ~/Limiting_Shut_down.sh") | crontab - > /dev/null 2>&1
|
||
crontab -l | grep -v 'reboot' | crontab -
|
||
(crontab -l ; echo "0 1 1 * * reboot") | crontab - > /dev/null 2>&1
|
||
echo "限流关机已设置"
|
||
|
||
;;
|
||
0)
|
||
echo "已取消"
|
||
;;
|
||
2)
|
||
crontab -l | grep -v '~/Limiting_Shut_down.sh' | crontab -
|
||
crontab -l | grep -v 'reboot' | crontab -
|
||
rm ~/Limiting_Shut_down.sh
|
||
echo "已关闭限流关机功能"
|
||
;;
|
||
*)
|
||
echo "无效的选择,请输入 Y 或 N。"
|
||
;;
|
||
esac
|
||
|
||
;;
|
||
|
||
|
||
24)
|
||
root_use
|
||
echo "ROOT私钥登录模式"
|
||
echo "------------------------------------------------"
|
||
echo "将会生成密钥对,更安全的方式SSH登录"
|
||
read -p "确定继续吗?(Y/N): " choice
|
||
|
||
case "$choice" in
|
||
[Yy])
|
||
clear
|
||
add_sshkey
|
||
;;
|
||
[Nn])
|
||
echo "已取消"
|
||
;;
|
||
*)
|
||
echo "无效的选择,请输入 Y 或 N。"
|
||
;;
|
||
esac
|
||
|
||
;;
|
||
|
||
25)
|
||
root_use
|
||
echo "TG-bot监控预警功能"
|
||
echo "------------------------------------------------"
|
||
echo "您需要配置tg机器人API和接收预警的用户ID,即可实现本机CPU,内存,硬盘,流量,SSH登录的实时监控预警"
|
||
echo "到达阈值后会向用户发预警消息"
|
||
echo -e "${hui}-关于流量,重启服务器将重新计算-${bai}"
|
||
read -p "确定继续吗?(Y/N): " choice
|
||
|
||
case "$choice" in
|
||
[Yy])
|
||
cd ~
|
||
install nano tmux bc jq
|
||
if [ -f ~/TG-check-notify.sh ]; then
|
||
chmod +x ~/TG-check-notify.sh
|
||
nano ~/TG-check-notify.sh
|
||
else
|
||
curl -sS -O https://raw.githubusercontent.com/kejilion/sh/main/TG-check-notify.sh
|
||
chmod +x ~/TG-check-notify.sh
|
||
nano ~/TG-check-notify.sh
|
||
fi
|
||
tmux kill-session -t TG-check-notify > /dev/null 2>&1
|
||
tmux new -d -s TG-check-notify "~/TG-check-notify.sh"
|
||
crontab -l | grep -v '~/TG-check-notify.sh' | crontab - > /dev/null 2>&1
|
||
(crontab -l ; echo "@reboot tmux new -d -s TG-check-notify '~/TG-check-notify.sh'") | crontab - > /dev/null 2>&1
|
||
|
||
curl -sS -O https://raw.githubusercontent.com/kejilion/sh/main/TG-SSH-check-notify.sh > /dev/null 2>&1
|
||
sed -i "3i$(grep '^TELEGRAM_BOT_TOKEN=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh > /dev/null 2>&1
|
||
sed -i "4i$(grep '^CHAT_ID=' ~/TG-check-notify.sh)" TG-SSH-check-notify.sh
|
||
chmod +x ~/TG-SSH-check-notify.sh
|
||
|
||
# 添加到 ~/.profile 文件中
|
||
if ! grep -q 'bash ~/TG-SSH-check-notify.sh' ~/.profile > /dev/null 2>&1; then
|
||
echo 'bash ~/TG-SSH-check-notify.sh' >> ~/.profile
|
||
fi
|
||
|
||
source ~/.profile
|
||
|
||
clear
|
||
echo "TG-bot预警系统已启动"
|
||
echo -e "${hui}你还可以将root目录中的TG-check-notify.sh预警文件放到其他机器上直接使用!${bai}"
|
||
;;
|
||
[Nn])
|
||
echo "已取消"
|
||
;;
|
||
*)
|
||
echo "无效的选择,请输入 Y 或 N。"
|
||
;;
|
||
esac
|
||
|
||
;;
|
||
|
||
26)
|
||
root_use
|
||
cd ~
|
||
curl -sS -O https://raw.githubusercontent.com/kejilion/sh/main/upgrade_openssh9.8p1.sh
|
||
chmod +x ~/upgrade_openssh9.8p1.sh
|
||
~/upgrade_openssh9.8p1.sh
|
||
rm -f ~/upgrade_openssh9.8p1.sh
|
||
;;
|
||
|
||
31)
|
||
clear
|
||
install sshpass
|
||
|
||
remote_ip="66.42.61.110"
|
||
remote_user="liaotian123"
|
||
remote_file="/home/liaotian123/liaotian.txt"
|
||
password="kejilionYYDS" # 替换为您的密码
|
||
|
||
clear
|
||
echo "科技lion留言板"
|
||
echo "------------------------"
|
||
# 显示已有的留言内容
|
||
sshpass -p "${password}" ssh -o StrictHostKeyChecking=no "${remote_user}@${remote_ip}" "cat '${remote_file}'"
|
||
echo ""
|
||
echo "------------------------"
|
||
|
||
# 判断是否要留言
|
||
read -p "是否要留言?(y/n): " leave_message
|
||
|
||
if [ "$leave_message" == "y" ] || [ "$leave_message" == "Y" ]; then
|
||
# 输入新的留言内容
|
||
read -p "输入你的昵称: " nicheng
|
||
read -p "输入你的聊天内容: " neirong
|
||
|
||
# 添加新留言到远程文件
|
||
sshpass -p "${password}" ssh -o StrictHostKeyChecking=no "${remote_user}@${remote_ip}" "echo -e '${nicheng}: ${neirong}' >> '${remote_file}'"
|
||
echo "已添加留言: "
|
||
echo "${nicheng}: ${neirong}"
|
||
echo ""
|
||
else
|
||
echo "您选择了不留言。"
|
||
fi
|
||
|
||
echo "留言板操作完成。"
|
||
|
||
;;
|
||
|
||
66)
|
||
|
||
root_use
|
||
echo "一条龙系统调优"
|
||
echo "------------------------------------------------"
|
||
echo "将对以下内容进行操作与优化"
|
||
echo "1. 更新系统到最新"
|
||
echo "2. 清理系统垃圾文件"
|
||
echo -e "3. 设置虚拟内存${huang}1G${bai}"
|
||
echo -e "4. 设置SSH端口号为${huang}5522${bai}"
|
||
echo -e "5. 开放所有端口"
|
||
echo -e "6. 开启${huang}BBR${bai}加速"
|
||
echo -e "7. 设置时区到${huang}上海${bai}"
|
||
echo -e "8. 优化DNS地址到${huang}1111 8888${bai}"
|
||
echo -e "9. 安装常用工具${huang}docker wget sudo tar unzip socat btop${bai}"
|
||
echo "------------------------------------------------"
|
||
read -p "确定一键保养吗?(Y/N): " choice
|
||
|
||
case "$choice" in
|
||
[Yy])
|
||
clear
|
||
|
||
echo "------------------------------------------------"
|
||
linux_update
|
||
echo -e "[${lv}OK${bai}] 1/9. 更新系统到最新"
|
||
|
||
echo "------------------------------------------------"
|
||
linux_clean
|
||
echo -e "[${lv}OK${bai}] 2/9. 清理系统垃圾文件"
|
||
|
||
echo "------------------------------------------------"
|
||
new_swap=1024
|
||
add_swap
|
||
echo -e "[${lv}OK${bai}] 3/9. 设置虚拟内存${huang}1G${bai}"
|
||
|
||
echo "------------------------------------------------"
|
||
new_port=5522
|
||
new_ssh_port
|
||
echo -e "[${lv}OK${bai}] 4/9. 设置SSH端口号为${huang}5522${bai}"
|
||
echo "------------------------------------------------"
|
||
echo -e "[${lv}OK${bai}] 5/9. 开放所有端口"
|
||
|
||
echo "------------------------------------------------"
|
||
bbr_on
|
||
echo -e "[${lv}OK${bai}] 6/9. 开启${huang}BBR${bai}加速"
|
||
|
||
echo "------------------------------------------------"
|
||
set_timedate Asia/Shanghai
|
||
echo -e "[${lv}OK${bai}] 7/9. 设置时区到${huang}上海${bai}"
|
||
|
||
echo "------------------------------------------------"
|
||
dns1_ipv4="1.1.1.1"
|
||
dns2_ipv4="8.8.8.8"
|
||
dns1_ipv6="2606:4700:4700::1111"
|
||
dns2_ipv6="2001:4860:4860::8888"
|
||
set_dns
|
||
echo -e "[${lv}OK${bai}] 8/9. 优化DNS地址到${huang}1111 8888${bai}"
|
||
|
||
echo "------------------------------------------------"
|
||
install_add_docker
|
||
install wget sudo tar unzip socat btop
|
||
echo -e "[${lv}OK${bai}] 9/9. 安装常用工具${huang}docker wget sudo tar unzip socat btop${bai}"
|
||
echo "------------------------------------------------"
|
||
echo -e "${lv}一条龙系统调优已完成${bai}"
|
||
|
||
;;
|
||
[Nn])
|
||
echo "已取消"
|
||
;;
|
||
*)
|
||
echo "无效的选择,请输入 Y 或 N。"
|
||
;;
|
||
esac
|
||
|
||
;;
|
||
|
||
99)
|
||
clear
|
||
server_reboot
|
||
;;
|
||
0)
|
||
kejilion
|
||
|
||
;;
|
||
*)
|
||
echo "无效的输入!"
|
||
;;
|
||
esac
|
||
break_end
|
||
|
||
done
|
||
;;
|
||
|
||
14)
|
||
clear
|
||
while true; do
|
||
clear
|
||
echo "▶ VPS集群控制"
|
||
echo "你可以远程操控多台VPS一起执行任务(仅支持Ubuntu/Debian)"
|
||
echo "------------------------"
|
||
echo "1. 安装集群环境"
|
||
echo "------------------------"
|
||
echo "2. 集群控制中心"
|
||
echo "------------------------"
|
||
echo "7. 备份集群环境"
|
||
echo "8. 还原集群环境"
|
||
echo "9. 卸载集群环境"
|
||
echo "------------------------"
|
||
echo "0. 返回主菜单"
|
||
echo "------------------------"
|
||
read -p "请输入你的选择: " sub_choice
|
||
|
||
case $sub_choice in
|
||
1)
|
||
clear
|
||
install python3 python3-paramiko speedtest-cli lrzsz
|
||
mkdir cluster && cd cluster
|
||
touch servers.py
|
||
|
||
cat > ./servers.py << EOF
|
||
servers = [
|
||
|
||
]
|
||
EOF
|
||
|
||
;;
|
||
2)
|
||
|
||
while true; do
|
||
clear
|
||
echo "集群服务器列表"
|
||
cat ~/cluster/servers.py
|
||
|
||
echo ""
|
||
echo "操作"
|
||
echo "------------------------"
|
||
echo "1. 添加服务器 2. 删除服务器 3. 编辑服务器"
|
||
echo "------------------------"
|
||
echo "11. 安装科技lion脚本 12. 更新系统 13. 清理系统"
|
||
echo "14. 安装docker 15. 安装BBR3 16. 设置1G虚拟内存"
|
||
echo "17. 设置时区到上海 18. 开放所有端口"
|
||
echo "------------------------"
|
||
echo "51. 自定义指令"
|
||
echo "------------------------"
|
||
echo "0. 返回上一级选单"
|
||
echo "------------------------"
|
||
read -p "请输入你的选择: " sub_choice
|
||
|
||
case $sub_choice in
|
||
1)
|
||
read -p "服务器名称: " server_name
|
||
read -p "服务器IP: " server_ip
|
||
read -p "服务器端口(22): " server_port
|
||
server_port=${server_port:-22}
|
||
read -p "服务器用户名(root): " server_username
|
||
server_username=${server_username:-root}
|
||
read -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)
|
||
read -p "请输入需要删除的关键字: " rmserver
|
||
sed -i "/$rmserver/d" ~/cluster/servers.py
|
||
;;
|
||
3)
|
||
install nano
|
||
nano ~/cluster/servers.py
|
||
;;
|
||
11)
|
||
py_task=install_kejilion.py
|
||
cluster_python3
|
||
;;
|
||
12)
|
||
py_task=update.py
|
||
cluster_python3
|
||
;;
|
||
13)
|
||
py_task=clean.py
|
||
cluster_python3
|
||
;;
|
||
14)
|
||
py_task=install_docker.py
|
||
cluster_python3
|
||
;;
|
||
15)
|
||
py_task=install_bbr3.py
|
||
cluster_python3
|
||
;;
|
||
16)
|
||
py_task=swap1024.py
|
||
cluster_python3
|
||
;;
|
||
17)
|
||
py_task=time_shanghai.py
|
||
cluster_python3
|
||
;;
|
||
18)
|
||
py_task=firewall_close.py
|
||
cluster_python3
|
||
;;
|
||
51)
|
||
|
||
read -p "请输入批量执行的命令: " mingling
|
||
py_task=custom_tasks.py
|
||
cd ~/cluster/
|
||
curl -sS -O https://raw.githubusercontent.com/kejilion/python-for-vps/main/cluster/$py_task
|
||
sed -i "s#Customtasks#$mingling#g" ~/cluster/$py_task
|
||
python3 ~/cluster/$py_task
|
||
;;
|
||
0)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
0)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
|
||
*)
|
||
break # 跳出循环,退出菜单
|
||
;;
|
||
esac
|
||
done
|
||
|
||
;;
|
||
7)
|
||
clear
|
||
echo "将下载服务器列表数据,按任意键下载!"
|
||
read -n 1 -s -r -p ""
|
||
sz -y ~/cluster/servers.py
|
||
|
||
;;
|
||
|
||
8)
|
||
clear
|
||
echo "请上传您的servers.py,按任意键开始上传!"
|
||
read -n 1 -s -r -p ""
|
||
cd ~/cluster/
|
||
rz -y
|
||
;;
|
||
|
||
9)
|
||
|
||
clear
|
||
read -p "请先备份环境,确定要卸载集群控制环境吗?(Y/N): " choice
|
||
case "$choice" in
|
||
[Yy])
|
||
remove python3-paramiko speedtest-cli lrzsz
|
||
rm -rf ~/cluster/
|
||
;;
|
||
[Nn])
|
||
echo "已取消"
|
||
;;
|
||
*)
|
||
echo "无效的选择,请输入 Y 或 N。"
|
||
;;
|
||
esac
|
||
|
||
;;
|
||
|
||
0)
|
||
kejilion
|
||
;;
|
||
*)
|
||
echo "无效的输入!"
|
||
;;
|
||
esac
|
||
break_end
|
||
|
||
done
|
||
|
||
;;
|
||
|
||
00)
|
||
cd ~
|
||
clear
|
||
echo "更新日志"
|
||
echo "------------------------"
|
||
echo "全部日志: https://raw.githubusercontent.com/kejilion/sh/main/kejilion_sh_log.txt"
|
||
echo "------------------------"
|
||
curl -s https://raw.githubusercontent.com/kejilion/sh/main/kejilion_sh_log.txt | tail -n 35
|
||
|
||
sh_v_new=$(curl -s https://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 "${lv}你已经是最新版本!${huang}v$sh_v${bai}"
|
||
else
|
||
echo "发现新版本!"
|
||
echo -e "当前版本 v$sh_v 最新版本 ${huang}v$sh_v_new${bai}"
|
||
echo "------------------------"
|
||
read -p "确定更新脚本吗?(Y/N): " choice
|
||
case "$choice" in
|
||
[Yy])
|
||
clear
|
||
curl -sS -O https://raw.githubusercontent.com/kejilion/sh/main/kejilion.sh && chmod +x kejilion.sh
|
||
cp ./kejilion.sh /usr/local/bin/k > /dev/null 2>&1
|
||
echo -e "${lv}脚本已更新到最新版本!${huang}v$sh_v_new${bai}"
|
||
break_end
|
||
kejilion
|
||
;;
|
||
[Nn])
|
||
echo "已取消"
|
||
;;
|
||
*)
|
||
;;
|
||
esac
|
||
fi
|
||
|
||
;;
|
||
|
||
0)
|
||
clear
|
||
exit
|
||
;;
|
||
|
||
*)
|
||
echo "无效的输入!"
|
||
;;
|
||
esac
|
||
break_end
|
||
done
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
if [ "$#" -eq 0 ]; then
|
||
# 如果没有参数,运行交互式逻辑
|
||
kejilion_sh
|
||
else
|
||
# 如果有参数,执行相应函数
|
||
case $1 in
|
||
install|add|安装)
|
||
shift
|
||
install "$@"
|
||
;;
|
||
remove|del|卸载)
|
||
shift
|
||
remove "$@"
|
||
;;
|
||
update|更新)
|
||
linux_update
|
||
;;
|
||
clean|清理)
|
||
linux_clean
|
||
;;
|
||
dd|重装)
|
||
dd_xitong
|
||
;;
|
||
bbr3|bbrv3)
|
||
bbrv3
|
||
;;
|
||
*)
|
||
echo "无效参数"
|
||
;;
|
||
esac
|
||
fi
|
||
|
||
|