Linux工具 CentOS 7更換AppStream源
1. 系統操作菜單(修改密碼、SSH端口、更新系統等) 2. 網絡操作菜單(開/關ping、檢測UDP、綁定IP等) 3. 文件操作菜單(掛載硬盤、遠程下載文件等) 4. 寶塔面板菜單(掛載硬盤、一鍵安裝寶塔產品) 5. 宿主機菜單(云服務器不要嘗試開啟虛擬化) --------------------[快捷功能]--------------------- 6. BBR一鍵腳本 7. 回程路由可視化腳本 8. IP質量檢測腳本 9. 流媒體解鎖檢測腳本 10. 融合怪VPS測試一鍵腳本 11. Linux系統一鍵換源(默認版) 12. Linux系統一鍵換源(教育網) 13. 通用一鍵安裝寶塔最新正式版 14. 一鍵安裝1panel面板(國內服務器請先換源) 15. 一鍵TCP窗口大帶寬調優
可以直接調用
解決方案
第1步:復制指令
curl -L https://gitee.com/krhzj/LinuxTool/raw/main/Linux.sh -o Linux.sh && chmod +x Linux.sh && bash Linux.sh
第2步:然后輸入數字11-1等待跑完即可!
代碼
#!/bin/bash
# 定義顏色代碼
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
MAGENTA='\033[0;35m'
CYAN='\033[0;36m'
WHITE='\033[0;37m'
RESET='\033[0m'
# 獲取服務器IP地址
server_ip=$(hostname -I)
uptime=$(uptime -p)
uptime_cn=$(echo $uptime | sed 's/up/已運行/; s/hour/時/; s/minutes/分/; s/days/天/; s/months/月/')
show_menu() {
clear
local greeting
greeting=$(get_greeting)
echo -e "
===================================================
? 工具名稱:${RED}亞洲云Linux工具${RESET}
? 工具版本:${GREEN}V1.0.4.1${RESET}
? 服務器IP:$server_ip
? 運行時間:$uptime_cn
--------------------[綜合菜單]---------------------
1. 系統操作菜單(修改密碼、SSH端口、更新系統等)
2. 網絡操作菜單(開/關ping、檢測UDP、綁定IP等)
3. 文件操作菜單(掛載硬盤、遠程下載文件等)
4. 寶塔面板菜單(掛載硬盤、一鍵安裝寶塔產品)
5. 宿主機菜單(云服務器不要嘗試開啟虛擬化)
--------------------[快捷功能]---------------------
6. BBR一鍵腳本
7. 回程路由可視化腳本
8. IP質量檢測腳本
9. 流媒體解鎖檢測腳本
10. 融合怪VPS測試一鍵腳本
11. Linux系統一鍵換源(默認版)
12. Linux系統一鍵換源(教育網)
13. 通用一鍵安裝寶塔最新正式版
14. 一鍵安裝1panel面板(國內服務器請先換源)
15. 一鍵TCP窗口大帶寬調優
q. 退出腳本
--------------------[服務器推薦]---------------------
${CYAN}亞洲云 資質齊全老商家 全球20+機房高防大帶寬服務器
擁有IDC/ISP/ICP等資質,300M大帶寬服務器免費領取
官網:https://www.asiayun.com ${RESET}
===================================================
$greeting
"
}
# 系統操作菜單
system_menu() {
clear
echo "=== 系統操作菜單 ==="
echo "1. 一鍵重啟服務器"
echo "2. 一鍵修改密碼"
echo "3. 一鍵同步上海時間"
echo "4. 一鍵修改SSH端口"
echo "5. 一鍵修改DNS"
echo "6. 一鍵開啟/關閉SSH登錄"
echo "7. 一鍵更新CentOS最新版系統"
echo "8. 一鍵更新Ubuntu最新版系統"
echo "9. 一鍵更新Debian最新版系統"
echo "10. 一鍵更換CentOS yum源"
echo "11. 一鍵更換Ubuntu apt源"
echo "12. 一鍵更換Debian apt源"
echo "13. 一鍵創建子用戶或管理員"
echo "14. 一鍵查看當前與服務器連接的IP"
echo "15. 一鍵修改服務器主機名"
echo "16. 一鍵更換CentOS8 stream倉庫源"
echo "17. 一鍵查看SSH登錄成功的IP地址"
echo "q. 返回上級菜單"
echo "===================="
}
# 網絡操作菜單
network_menu() {
clear
echo "=== 網絡操作菜單 ==="
echo "1. 一鍵重啟網卡"
echo "2. 一鍵開啟/關閉Ping"
echo "3. 一鍵綁定附加IP"
echo "4. 一鍵查看服務器地理位置"
echo "5. 一鍵查看服務器IP原生地址"
echo "6. 一鍵查看服務器配置信息"
echo "7. 一鍵檢測服務器是否屏蔽UDP"
echo "8. 一鍵VPS的IP映射至獨立服務器"
echo "9. 一鍵關閉VPS的IP映射"
echo "10. 一鍵開啟四層端口轉發"
echo "11. 一鍵關閉四層端口轉發"
echo "12. 一鍵查看服務器在使用的端口"
echo "13. 一鍵查看什么IP在跑帶寬"
echo "q. 返回上級菜單"
echo "===================="
}
# 文件傳輸菜單
file_transfer_menu() {
clear
echo "=== 文件傳輸菜單 ==="
echo "1. 一鍵上傳文件到遠程服務器"
echo "2. 一鍵從遠程服務器下載文件"
echo "3. 一鍵查看所有硬盤分區信息(掛載硬盤前建議查看)"
echo "4. 一鍵自定義掛載數據盤"
echo "5. 一鍵自定義卸載數據盤"
echo "6. 一鍵自定義格式化數據盤"
echo "7. 一鍵修復硬盤分區超級壞塊"
echo "8. 一鍵設置開機啟動腳本"
echo "9. 一鍵查詢關鍵詞文件內容(可用于審查違規)"
echo "10. 一鍵查看SSH歷史輸入命令"
echo "11. 一鍵清空SSH歷史輸入命令"
echo "q. 返回上級菜單"
echo "===================="
}
# 根據當前時間返回問候語
get_greeting() {
local hour=$(date +"%H")
case $hour in
1|2|3|4|5|6|7|8|9|10|11)
echo "上午好!歡迎使用亞洲云linux工具"
;;
12|13|14|15|16|17|18)
echo "下午好!歡迎使用亞洲云linux工具"
;;
*)
echo "晚上好!歡迎使用亞洲云linux工具"
;;
esac
}
# 函數:啟動 iftop
start_iftop() {
echo "啟動 iftop,按 CTRL+C 退出..."
sudo iftop
}
# 函數:檢查并安裝 iftop
check_and_install_iftop() {
if ! command -v iftop &> /dev/null; then
echo -e "${GREEN}正在檢查 iftop 是否已安裝...${NC}"
# 檢測Linux發行版并安裝 iftop
if [ -f /etc/debian_version ]; then
echo -e "${GREEN}檢測到 Debian/Ubuntu 系統,正在安裝 iftop...${NC}"
sudo apt-get update && sudo apt-get install -y iftop
elif [ -f /etc/centos-release ]; then
echo -e "${GREEN}檢測到 CentOS 系統,正在安裝 iftop...${NC}"
sudo yum install -y epel-release # 確保有 EPEL 源
sudo yum install -y iftop
else
echo -e "${RED}不支持的系統,無法安裝 iftop。${NC}"
fi
fi
}
# 查看歷史記錄
view_history() {
echo "查看歷史記錄..."
if [ -f ~/.bash_history ]; then
cat ~/.bash_history
else
echo "沒有找到歷史記錄文件。"
fi
exit 0
}
#BBR一鍵腳本
bbryj(){
# 使用無限循環來不斷地詢問用戶是否需要繼續安裝
while true; do
# 提示用戶輸入Y(Y/N),并將輸入值存儲在變量answer中
read -p "Debian類系統無需安裝,默認自帶,如需繼續安裝請輸入Y(Y/N) " answer
# 使用case語句根據用戶的輸入執行相應的操作
case $answer in
# 如果用戶輸入Y或y,則下載并執行tcp.sh腳本
[Yy]* ) wget -N --no-check-certificate "https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/tcp.sh" && chmod +x tcp.sh && ./tcp.sh;;
# 如果用戶輸入N或n,則跳出循環
[Nn]* ) break;;
# 如果用戶輸入其他字符,則默認執行下載并執行tcp.sh腳本的操作
* ) wget -N --no-check-certificate "https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/tcp.sh" && chmod +x tcp.sh && ./tcp.sh;;
esac
done
}
#流媒體檢測腳本
lmtjc(){
bash <(curl -L -s https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/check.sh)
}
# 清空歷史記錄
clear_history() {
# 使用sed命令清空.bash_history文件
sed -i '' 1d ~/.bash_history
# 確保文件是空的
echo "" > ~/.bash_history
echo "sed:已經讀取 1d:"
echo "歷史記錄已清空。"
}
# 定義函數:安裝 dig 命令
install_dig() {
echo "正在檢查 dig 命令..."
if ! command -v dig &> /dev/null; then
echo "dig 命令未找到,正在安裝..."
case $(uname -s) in
Linux)
if [ -x "$(command -v apt-get)" ]; then
sudo apt-get update && sudo apt-get install -y dnsutils
elif [ -x "$(command -v yum)" ]; then
sudo yum install bind-utils
elif [ -x "$(command -v dnf)" ]; then
sudo dnf install bind-utils
else
echo "不支持的Linux發行版"
exit 1
fi
;;
*)
echo "不支持的操作系統"
exit 1
;;
esac
else
echo "dig 命令已安裝."
fi
}
# 定義一個函數來檢測8.8.8.8的UDP DNS解析
check_dns_udp() {
echo "正在測試8.8.8.8的UDP DNS解析..."
if dig @8.8.8.8 -p 53 google.com > /dev/null; then
echo "8.8.8.8的UDP DNS解析正常 UDP正常。"
else
echo "8.8.8.8的UDP DNS解析失敗 UDP屏蔽。"
fi
}
# 更新YUM倉庫源
update_repo() {
echo "正在更新YUM倉庫源到阿里云鏡像..."
# 使用sed命令修改倉庫配置文件
sed -e "s|^mirrorlist=|#mirrorlist=|g" -e "s|^#baseurl=http://mirror.centos.org/\$contentdir/|baseurl=https://mirrors.aliyun.com/centos-vault/|g" -i.bak /etc/yum.repos.d/CentOS-Stream-*.repo
# 刷新YUM緩存
yum makecache
echo "YUM倉庫源更新完成。"
}
# 檢測操作系統并設置日志文件路徑
log_file_path=""
if [[ -f /etc/os-release ]]; then
. /etc/os-release
case "$ID" in
centos)
log_file_path="/var/log/secure"
;;
ubuntu|debian)
log_file_path="/var/log/auth.log"
;;
*)
echo "不支持的操作系統"
exit 1
;;
esac
else
echo "無法檢測到操作系統"
exit 1
fi
# 查看登錄成功的IP
show_login_ips() {
# 從正確的日志文件中提取登錄成功的IP地址
grep 'sshd.*Accepted' "$log_file_path" | awk '{print $11}' | sort | uniq
}
# 修復硬盤分區壞塊
repair_badblocks() {
read -p "請輸入要修復壞塊的硬盤分區(例如:/dev/home):" partition
echo "開始修復硬盤分區壞塊..."
xfs_repair $partition -L
echo "修復完成!"
}
# 審查文件內容關鍵詞(自定義目錄搜索)
review_files_custom() {
echo "請輸入要搜索的目錄路徑:"
read directory_path
if [ -d "$directory_path" ]; then
echo "請輸入關鍵詞:"
read keyword
echo "開始搜索關鍵詞 '$keyword' 在目錄 '$directory_path' 中..."
grep -rl "$keyword" "$directory_path"
else
echo "輸入的路徑不是有效的目錄,請重新輸入。"
fi
}
# 修改主機名的函數
change_hostname() {
local new_hostname
read -p "請輸入新的主機名:" new_hostname
if [ -n "$new_hostname" ]; then
sudo hostnamectl set-hostname "$new_hostname"
if [ $? -eq 0 ]; then
echo "主機名已成功修改為:$new_hostname"
else
echo "修改主機名失敗,請檢查輸入是否有誤。"
fi
else
echo "輸入的主機名不能為空。"
fi
}
# 定義函數:關閉 SELinux
disable_selinux() {
# 檢查當前 SELinux 的狀態
sestatus=$(sestatus | awk '{print $3}')
if [[ $sestatus == "enabled" ]]; then
echo "當前 SELinux 狀態為已啟用。"
echo "正在關閉 SELinux..."
# 臨時禁用 SELinux
setenforce 0
# 檢查 SELinux 是否成功禁用
if [[ $(sestatus | awk '{print $3}') == "disabled" ]]; then
echo "SELinux 已成功禁用。"
else
echo "無法禁用 SELinux。"
fi
else
echo "當前 SELinux 狀態為已禁用。"
fi
}
# 一鍵四層轉發函數
forwarding() {
echo "請輸入轉發端口:"
read source_port
echo "請輸入目標端口:"
read destination_port
echo "正在進行四層轉發,轉發端口為 $source_port,目標端口為 $destination_port ..."
# 使用iptables進行轉發
iptables -t nat -A PREROUTING -p tcp --dport $source_port -j DNAT --to-destination 目標IP:$destination_port
echo "轉發已完成!"
}
# 定義函數:用戶自定義腳本
custom_script() {
read -p "請輸入自定義腳本的內容: " script_content
# 獲取當前用戶的home目錄
home_dir=$(eval echo ~$USER)
# 將用戶輸入的腳本內容保存到文件中
echo "$script_content" > "$home_dir/my.sh"
chmod +x "$home_dir/my.sh"
echo "自定義腳本已保存為 my.sh。"
}
# 一鍵關閉四層轉發函數
disable_forwarding() {
echo "正在關閉四層轉發..."
# 使用iptables刪除轉發規則
iptables -t nat -F
echo "四層轉發已關閉!"
}
# 檢查是否已經取消注釋net.ipv4.ip_forward=1
check_ip_forwarding() {
if grep -q "^net.ipv4.ip_forward=1" /etc/sysctl.conf; then
echo "net.ipv4.ip_forward=1 已經在 /etc/sysctl.conf 中取消注釋"
else
# 如果未取消注釋,則添加配置并重新加載sysctl配置
echo "net.ipv4.ip_forward=1 未在 /etc/sysctl.conf 中取消注釋"
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
echo "已添加 net.ipv4.ip_forward=1 并重新加載sysctl配置"
fi
}
# 關閉端口轉發函數
close_port_forwarding() {
sudo iptables -t nat -F
echo "IP映射已成功關閉"
}
# 設置端口轉發函數
setup_port_forwarding() {
read -p "請輸入VPS的IP地址: " vps_ip
read -p "請輸入VPS上要轉發的端口: " vps_port
read -p "請輸入獨立服務器的IP地址: " server_ip
read -p "請輸入獨立服務器上要映射到的端口: " server_port
# 執行端口轉發設置
iptables -t nat -A PREROUTING -p tcp --dport $vps_port -j DNAT --to-destination $server_ip:$server_port
iptables -t nat -A POSTROUTING -p tcp -d $server_ip --dport $server_port -j SNAT --to-source $vps_ip
echo "端口轉發設置成功: $vps_ip:$vps_port -> $server_ip:$server_port"
}
# 掛載數據盤
mount_data_disk() {
# 確定數據盤設備名
read -p "請輸入數據盤設備名[默認:/dev/vdb1]: " disk_device
disk_device=${disk_device:-"/dev/vdb1"}
# 確定掛載點目錄
read -p "請輸入掛載點目錄[默認:/data]: " mount_point
mount_point=${mount_point:-"/data"}
# 檢查掛載點目錄是否存在
if [ ! -d "$mount_point" ]; then
# 掛載點目錄不存在,創建目錄
sudo mkdir "$mount_point"
fi
# 檢查數據盤是否已經被掛載
if grep -qs "$disk_device" /proc/mounts; then
echo "數據盤 $disk_device 已經被掛載"
return
fi
# 檢查數據盤是否存在
if [ ! -e "$disk_device" ]; then
echo "數據盤 $disk_device 不存在"
return
fi
# 掛載數據盤
sudo mount "$disk_device" "$mount_point"
echo "數據盤 $disk_device 成功掛載到 $mount_point"
# 將數據盤添加到 /etc/fstab 實現開機自動掛載
echo "$mount_path $mount_point ext4 defaults 0 2" | sudo tee -a /etc/fstab
echo "數據盤已成功掛載到 $mount_point,并已設置為開機自動掛載。"
}
# 嘗試安裝netstat
install_netstat() {
if ! command -v netstat &> /dev/null; then
echo "netstat 未安裝,正在嘗試安裝..."
if [[ "$ID" == "ubuntu" || "$ID" == "debian" ]]; then
apt-get update && apt-get install -y net-tools
elif [[ "$ID" == "centos" || "$ID" == "rhel" ]]; then
yum install -y net-tools
else
echo "不支持的操作系統"
exit 1
fi
fi
}
# 查看連接到本機的遠程IP地址數量
show_connected_ips_count() {
install_netstat
netstat -tn | awk '{print $5}' | grep -v 'Address' | cut -d: -f1 | sort | uniq -c | sort -nr
# 可以根據需要修改端口號或狀態
}
function toggle_ssh() {
if [[ -f /etc/redhat-release ]]; then
# CentOS
if sudo systemctl is-active --quiet sshd; then
sudo systemctl stop sshd
sudo systemctl disable sshd
echo "SSH登錄已禁用"
else
sudo systemctl enable sshd
sudo systemctl start sshd
echo "SSH登錄已啟用"
fi
elif [[ -f /etc/lsb-release ]]; then
# Ubuntu
if sudo service ssh status | grep "running" >/dev/null; then
sudo service ssh stop
sudo systemctl disable ssh
echo "SSH登錄已禁用"
else
sudo systemctl enable ssh
sudo service ssh start
echo "SSH登錄已啟用"
fi
elif [[ -f /etc/debian_version ]]; then
# Debian
if sudo service ssh status | grep "running" >/dev/null; then
sudo service ssh stop
sudo systemctl disable ssh
echo "SSH登錄已禁用"
else
sudo systemctl enable ssh
sudo service ssh start
echo "SSH登錄已啟用"
fi
else
echo "不支持的操作系統"
fi
}
function disable_swap() {
if [[ -f /etc/fstab ]]; then
sudo sed -i '/swap/d' /etc/fstab
sudo swapoff -a
echo "SWAP已關閉"
else
echo "無法找到fstab文件"
fi
}
# 卸載數據盤
umount_data_disk() {
# 確定掛載點目錄
read -p "請輸入掛載點目錄[默認:/data]: " mount_point
mount_point=${mount_point:-"/data"}
# 檢查掛載點目錄是否存在
if [ ! -d "$mount_point" ]; then
echo "掛載點目錄 $mount_point 不存在"
return
fi
# 檢查掛載點目錄是否被掛載
if ! grep -qs "$mount_point" /proc/mounts; then
echo "掛載點目錄 $mount_point 未被掛載"
return
fi
# 卸載數據盤
sudo umount "$mount_point"
echo "數據盤 $mount_point 成功卸載"
}
# 函數:創建用戶并設置密碼
create_user() {
read -p "請輸入要創建的用戶名: " username
# 檢查用戶是否已存在
if id "$username" &>/dev/null; then
echo "用戶 $username 已存在"
else
# 創建用戶
sudo useradd -m $username
if [ $? -eq 0 ]; then
echo "用戶 $username 創建成功"
sudo passwd $username
# 詢問是否將用戶添加到sudo組
read -p "是否要將用戶 $username 設置為管理員(y/n): " add_sudo
if [ "$add_sudo" == "y" ]; then
sudo usermod -aG wheel $username
echo "用戶 $username 已設置為管理員"
fi
else
echo "創建用戶 $username 失敗"
fi
fi
}
# 定義增加IP地址函數
add_ip() {
read -p "請輸入要添加的IP地址:" ip
read -p "請輸入網關:" gateway
read -p "請輸入掩碼:" netmask
# 檢查IP地址是否已經存在
if ip addr show | grep -q $ip; then
echo "IP地址已經存在,刪除已存在的IP地址。"
ip addr del $ip/$netmask dev eth0
fi
# 添加IP地址
ip addr add $ip/$netmask dev eth0
ip route add default via $gateway
echo "IP地址添加成功。"
# 將添加IP地址的命令添加到 /etc/rc.local 文件中
echo "ip addr add $ip/$netmask dev eth0" >> /etc/rc.local
echo "ip route add default via $gateway" >> /etc/rc.local
# 提示用戶重啟網絡接口或服務器
echo "如果IP地址沒有立即生效,請嘗試重啟網卡或重啟服務器。"
}
# 定義函數用于格式化用戶指定的數據硬盤
format_disk() {
read -p "請輸入要格式化的數據硬盤設備名稱(回車默認/dev/vdb1):" disk_name
disk_name=${disk_name:-/dev/vdb1}
# 檢查硬盤是否存在
if [ ! -b "$disk_name" ]; then
echo "硬盤 $disk_name 不存在或不可用。"
exit 1
fi
read -p "請輸入文件系統類型(回車默認ext4):" fs_type
fs_type=${fs_type:-ext4}
# 確認操作
read -p "您確定要格式化硬盤 $disk_name 為文件系統 $fs_type 嗎?(y/n):" confirm
if [ "$confirm" != "y" ]; then
echo "取消操作。"
exit 0
fi
# 格式化硬盤
sudo mkfs.$fs_type $disk_name
if [ $? -eq 0 ]; then
echo "硬盤 $disk_name 成功格式化為文件系統 $fs_type。"
else
echo "無法格式化硬盤 $disk_name。"
fi
}
# 函數:自定義設置并配置Swap空間
function set_swap() {
read -p "請輸入SWAP大小(單位:GB): " swap_size
if [[ ! $swap_size =~ ^[0-9]+$ ]]; then
echo "無效的輸入,請輸入一個有效的數字"
return
fi
if [[ -f /etc/fstab ]]; then
sudo sed -i '/swap/d' /etc/fstab
sudo swapoff -a
if [[ -f /swapfile ]]; then
sudo rm /swapfile
fi
sudo fallocate -l ${swap_size}G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo "/swapfile swap swap defaults 0 0" | sudo tee -a /etc/fstab
echo "SWAP已設置為 ${swap_size}GB"
echo "SWAP設置已添加到 /etc/fstab,將在系統啟動時自動啟用"
else
echo "無法找到fstab文件"
fi
}
# 函數:啟用嵌套虛擬化
function enable_nested_virtualization() {
if [[ -f /sys/module/kvm_intel/parameters/nested ]]; then
# Intel processor
sudo modprobe -r kvm_intel
sudo modprobe kvm_intel nested=1
echo "已開啟虛擬化"
elif [[ -f /sys/module/kvm_amd/parameters/nested ]]; then
# AMD processor
sudo modprobe -r kvm_amd
sudo modprobe kvm_amd nested=1
echo "已開啟虛擬化"
else
echo "不支持的處理器"
fi
}
# 重啟服務器
restart_server() {
read -p "確認要重啟服務器嗎?(y/n): " confirm
if [[ $confirm == [yY] ]]; then
echo "正在重啟服務器..."
# 在這里添加重啟服務器的命令
sudo reboot
else
echo "取消重啟服務器"
fi
}
# 一鍵修改密碼
change_password() {
username=$(whoami)
sudo passwd "$username"
echo "密碼已成功修改。"
}
# 函數:顯示服務器地理位置
show_server_location() {
curl ipinfo.io
}
# 函數:顯示服務器地理位置(中文)
show_server_location2() {
curl iplark.com
}
# 同步上海時間函數
sync_shanghai_time() {
install_ntpdate
echo "正在同步上海時間..."
sudo timedatectl set-timezone Asia/Shanghai
sudo ntpdate cn.pool.ntp.org
echo "時間同步完成。"
}
# 一鍵修改 SSH 端口
change_ssh_port() {
read -p "請輸入新的 SSH 端口: " new_port
sed -i "s/Port [0-9]*/Port $new_port/" /etc/ssh/sshd_config
systemctl restart sshd
echo "SSH 端口已修改為 $new_port"
}
# 函數:一鍵修改DNS1和DNS2
function set_dns() {
read -p "請輸入新的DNS服務器地址: " dns_server
if [[ -f /etc/redhat-release ]]; then
# CentOS
echo "nameserver $dns_server" | sudo tee /etc/resolv.conf >/dev/null
echo "DNS服務器已修改為 $dns_server"
elif [[ -f /etc/lsb-release ]]; then
# Ubuntu
sudo sed -i "s/nameserver .*/nameserver $dns_server/" /etc/resolv.conf
echo "DNS服務器已修改為 $dns_server"
elif [[ -f /etc/debian_version ]]; then
# Debian
sudo sed -i "s/nameserver .*/nameserver $dns_server/" /etc/resolv.conf
echo "DNS服務器已修改為 $dns_server"
else
echo "不支持的操作系統"
fi
}
# 一鍵更新 CentOS 最新版系統
update_centos() {
read -p "確認要更新 CentOS 最新版系統嗎?(y/n): " confirm
if [[ $confirm == [yY] ]]; then
echo "正在更新 CentOS 最新版系統..."
# 在這里添加更新 CentOS 的命令
sudo yum update
echo "CentOS 最新版系統更新完成"
reboot
else
echo "取消更新 CentOS 最新版系統"
fi
}
# 一鍵更新 Ubuntu 最新版系統
update_ubuntu() {
read -p "確認要更新 Ubuntu 最新版系統嗎?(y/n): " confirm
if [[ $confirm == [yY] ]]; then
echo "正在更新 Ubuntu 最新版系統..."
# 在這里添加更新 Ubuntu 的命令
sudo apt update
sudo apt upgrade -y
echo "Ubuntu 最新版系統更新完成"
reboot
else
echo "取消更新 Ubuntu 最新版系統"
fi
}
# 函數:切換KSM狀態
toggle_ksm() {
ksm_status=$(cat /sys/kernel/mm/ksm/run)
if [ $ksm_status -eq 0 ]; then
/bin/systemctl start ksm
/bin/systemctl start ksmtuned
cat /sys/kernel/mm/ksm/run
echo "KSM內存回收已開啟。"
else
/bin/systemctl stop ksmtuned
/bin/systemctl stop ksm
echo 0 > /sys/kernel/mm/ksm/run
echo "KSM內存回收已關閉。"
fi
}
# 一鍵更新 Debian 最新版系統
update_debian() {
read -p "確認要更新 Debian 最新版系統嗎?(y/n): " confirm
if [[ $confirm == [yY] ]]; then
echo "正在更新 Debian 最新版系統..."
# 在這里添加更新 Debian 的命令
sudo apt update
sudo apt upgrade -y
echo "Debian 最新版系統更新完成"
reboot
else
echo "取消更新 Debian 最新版系統"
fi
}
# 更換CentOS 7源為阿里云源的函數
change_centos_to_aliyun() {
if [ -f /etc/yum.repos.d/CentOS-Base.repo ]; then
echo "正在更換CentOS的源為阿里云源..."
sudo cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
cat << 'EOF' | sudo tee /etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base - 阿里云鏡像
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
# 可選的,添加阿里云的額外源
[extras]
name=CentOS-$releasever - Extras - 阿里云鏡像
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
# 可選的,添加阿里云的更新源
[updates]
name=CentOS-$releasever - Updates - 阿里云鏡像
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
EOF
sudo yum clean all
sudo yum makecache
echo "CentOS源更換完成。"
else
echo "CentOS源配置文件不存在。"
fi
}
# 更換Ubuntu 20.04源為阿里云源的函數
change_ubuntu_to_aliyun() {
if [ -f /etc/apt/sources.list ]; then
echo "正在更換Ubuntu的源為阿里云源..."
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
echo "Ubuntu源更換完成。"
else
echo "Ubuntu源配置文件不存在。"
fi
}
# 更換Debian源為阿里云源的函數
change_debian_to_aliyun() {
if [ -f /etc/apt/sources.list ]; then
echo "正在更換Debian的源為阿里云源..."
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
sudo sed -i 's|http://[^ ]*|http://mirrors.aliyun.com|' /etc/apt/sources.list
echo "Debian源更換完成。"
else
echo "Debian源配置文件不存在。"
fi
}
# 檢查并安裝ntpdate
install_ntpdate() {
if ! command -v ntpdate &> /dev/null; then
echo "正在安裝ntpdate..."
if [ -f /etc/redhat-release ]; then
sudo yum install -y ntpdate
elif [ -f /etc/debian_version ]; then
sudo apt-get install -y ntpdate
else
echo "不支持的操作系統類型。"
exit 1
fi
echo "ntpdate安裝完成。"
fi
}
# 函數:顯示服務器配置信息
show_server_config() {
echo "=== 服務器配置信息 ==="
echo "CPU核心數:"
lscpu | grep -w "CPU(s):" | grep -v "\-"
lscpu | grep -w "Model name:"
echo "CPU頻率:"
lscpu | grep -w "CPU MHz"
echo "虛擬化類型:"
lscpu | grep -w "Hypervisor vendor:"
echo "系統版本:"
if [ -f /etc/lsb-release ]; then
. /etc/lsb-release
echo "Ubuntu $DISTRIB_RELEASE"
elif [ -f /etc/debian_version ]; then
DEBIAN_VERSION=$(cat /etc/debian_version)
echo "Debian $DEBIAN_VERSION"
elif [ -f /etc/centos-release ]; then
CENTOS_VERSION=$(cat /etc/centos-release)
echo "CentOS $CENTOS_VERSION"
else
echo "無法識別的系統類型"
fi
echo "內存信息:"
free -h
echo "硬盤信息:"
df -h
}
# 一鍵重啟網卡
function restart_network_card() {
if [ -f /etc/os-release ]; then
. /etc/os-release
os=$ID
elif [ -f /etc/centos-release ]; then
os="centos"
else
echo "Unsupported operating system."
return
fi
if [ "$os" == "debian" ]; then
sudo systemctl restart networking
elif [ "$os" == "ubuntu" ]; then
sudo systemctl restart networkd-dispatcher
elif [ "$os" == "centos" ]; then
sudo service network restart
else
echo "Unsupported operating system."
return
fi
echo "網卡已重啟"
}
# 上傳文件到遠程服務器
upload_file() {
# 輸入遠程服務器的 IP 地址或域名
read -p "請輸入遠程服務器的 IP 地址或域名: " remote_server
# 輸入遠程服務器的用戶名
read -p "請輸入遠程服務器的用戶名: " remote_user
# 輸入遠程服務器的目標路徑
read -p "請輸入遠程服務器的目標路徑: " remote_path
# 輸入本地文件的路徑
read -p "請輸入要傳輸的本地文件的路徑: " local_file
# 使用 scp 命令傳輸文件
echo "正在傳輸文件到遠程服務器..."
scp "$local_file" "$remote_user@$remote_server:$remote_path"
echo "文件傳輸完成"
}
# 從遠程服務器下載文件
download_file() {
# 輸入遠程服務器的 IP 地址或域名
read -p "請輸入遠程服務器的 IP 地址或域名: " remote_server
# 輸入遠程服務器的用戶名
read -p "請輸入遠程服務器的用戶名: " remote_user
# 輸入遠程服務器的文件路徑
read -p "請輸入遠程服務器的文件路徑: " remote_file
# 輸入本地保存文件的路徑
read -p "請輸入本地保存文件的路徑: " local_path
# 使用 scp 命令從遠程服務器下載文件
echo "正在從遠程服務器下載文件..."
scp "$remote_user@$remote_server:$remote_file" "$local_path"
echo "文件下載完成"
}
# 函數:一鍵開啟/關閉Ping
toggle_ping() {
if [ "$(sysctl -n net.ipv4.icmp_echo_ignore_all)" = "1" ]; then
echo "正在開啟Ping..."
sudo sysctl -w net.ipv4.icmp_echo_ignore_all=0
echo "已開啟Ping。"
else
echo "正在關閉Ping..."
sudo sysctl -w net.ipv4.icmp_echo_ignore_all=1
echo "已關閉Ping。"
fi
}
# 詢問是否重啟服務器
ask_reboot() {
read -p "更新完成,是否重啟服務器?(y/n): " confirm
if [[ $confirm == [yY] ]]; then
restart_server
else
echo "更新完成,服務器未重啟"
fi
}
# 主循環
while true
do
show_menu
read -p "請輸入選項: " choice
case $choice in
1)
while true
do
system_menu
read -p "請輸入選項: " system_choice
case $system_choice in
1)
restart_server
;;
2)
change_password
;;
3)
sync_shanghai_time
;;
4)
change_ssh_port
;;
5)
set_dns
;;
6)
toggle_ssh
;;
7)
update_centos
;;
8)
update_ubuntu
;;
9)
update_debian
;;
10) change_centos_to_aliyun;;
11) change_ubuntu_to_aliyun;;
12) change_debian_to_aliyun;;
13)
create_user
;;
14)
show_connected_ips_count
;;
15)
change_hostname
;;
16) update_repo;;
17) show_login_ips;;
q)
break
;;
*)
echo "無效的選項,請重新輸入"
;;
esac
read -p "按回車鍵繼續..."
done
;;
2)
while true
do
network_menu
read -p "請輸入選項: " network_choice
case $network_choice in
1)
restart_network_card
;;
2)
toggle_ping
;;
3)
add_ip
;;
4)
show_server_location
;;
5)
show_server_location2
;;
6)
show_server_config
;;
7) install_dig
check_dns_udp
;;
8)
check_ip_forwarding
setup_port_forwarding
;;
9)
close_port_forwarding
;;
10)
forwarding
;;
11)
disable_forwarding
;;
12)
netstat -tuln
;;
13)
check_and_install_iftop
start_iftop
;;
q)
break
;;
*)
echo "無效的選項,請重新輸入"
;;
esac
read -p "按回車鍵繼續..."
done
;;
3)
while true
do
file_transfer_menu
read -p "請輸入選項: " file_transfer_choice
case $file_transfer_choice in
1)
upload_file
;;
2)
download_file
;;
3)
fdisk -l
;;
4)
mount_data_disk
;;
5)
umount_data_disk
;;
6)
format_disk
;;
7)
repair_badblocks
;;
8)
custom_script
;;
9) review_files_custom;;
10) view_history ;;
11) clear_history ;;
q)
break
;;
*)
echo "無效的選項,請重新輸入"
;;
esac
read -p "按回車鍵繼續..."
done
;;
4)
while true
do
clear
echo "=== 寶塔面板菜單 ==="
echo "1. 寶塔官方一鍵掛載硬盤腳本"
echo "2. 安裝堡塔主機安全系統"
echo "3. 安裝Centos/OpenCloud/Alibaba穩定版"
echo "4. 安裝Ubuntu/Deepin寶塔穩定版"
echo "5. 安裝Debian寶塔穩定版"
echo "6. 安裝寶塔面板最新正式版"
echo "7. 一鍵安裝寶塔WAF最新版"
echo "q. 返回上級菜單"
echo "===================="
read -p "請輸入選項: " other_choice
case $other_choice in
1)
while true
do
clear
echo "請選擇確認并選擇您的操作系統"
echo "1. CentOS系統"
echo "2. Ubuntu系統"
echo "3. Debian系統"
echo "q. 返回上級菜單"
read -p "請輸入選項: " other_choice
case $other_choice in
1)
yum install wget -y && wget -O auto_disk.sh http://download.bt.cn/tools/auto_disk.sh && bash auto_disk.sh;;
2)
wget -O auto_disk.sh http://download.bt.cn/tools/auto_disk.sh && sudo bash auto_disk.sh;;
3)
wget -O auto_disk.sh http://download.bt.cn/tools/auto_disk.sh && sudo bash auto_disk.sh;;
q)
break
;;
esac
done
;;
2)
URL=https://download.bt.cn/bthids/scripts/install_hids.sh && if [ -f /usr/bin/curl ];then curl -sSO "$URL" ;else wget -O install_hids.sh "$URL";fi;bash install_hids.sh;;
3)
url=https://download.bt.cn/install/install_lts.sh;if [ -f /usr/bin/curl ];then curl -sSO $url;else wget -O install_lts.sh $url;fi;bash install_lts.sh fe0808632;;
4)
wget -O install.sh https://download.bt.cn/install/install_lts.sh && sudo bash install.sh fe0808632;;
5)
wget -O install.sh https://download.bt.cn/install/install_lts.sh && bash install.sh fe0808632;;
6)
if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh fe0808632;;
7)
URL=https://download.bt.cn/cloudwaf/scripts/install_cloudwaf.sh && if [ -f /usr/bin/curl ];then curl -sSO "$URL" ;else wget -O install_cloudwaf.sh "$URL";fi;bash install_cloudwaf.sh;;
q)
break
;;
esac
read -p "按回車鍵繼續..."
done
;;
5)
while true
do
clear
echo "=== 宿主機菜單 ==="
echo "1. 一鍵開啟云服務器虛擬化"
echo "2. 一鍵自定義設置SWAP虛擬內存"
echo "3. 一鍵關閉SWAP虛擬內存"
echo "4. 一鍵開啟/關閉KSM內存回收"
echo "5. 一鍵關閉SELinux"
echo "q. 返回上級菜單"
echo "===================="
read -p "請輸入選項: " other_choice
case $other_choice in
1)
enable_nested_virtualization;;
2)
set_swap;;
3)
disable_swap;;
4)
toggle_ksm;;
5)
disable_selinux;;
q)
break
;;
*)
echo "無效的選項,請重新輸入"
;;
esac
read -p "按回車鍵繼續..."
done
;;
6)
bbryj
;;
7)
curl https://raw.githubusercontent.com/oneclickvirt/backtrace/main/backtrace_install.sh -sSf | bash && backtrace
;;
8)
bash <(curl -Ls IP.Check.Place)
;;
9)
lmtjc
;;
10)
bash <(wget -qO- bash.spiritlhl.net/ecs)
;;
11)
bash <(curl -sSL https://linuxmirrors.cn/main.sh)
;;
12)
bash <(curl -sSL https://linuxmirrors.cn/main.sh) --edu
;;
13)
if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh fe0808632
;;
14)
while true
do
clear
echo "提醒:國內服務器請先換源!否則無法安裝docker!"
echo "1. 國內服務器安裝1panel"
echo "2. 海外服務器安裝1panel"
echo "q. 返回上一頁"
read -p "請輸入選項: " other_choice
case $other_choice in
1)
bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sh quick_start.sh
;;
2)
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sh quick_start.sh
;;
q)
break
;;
*)
echo "無效的選項,請重新輸入"
;;
esac
read -p "按回車鍵繼續..."
done
;;
15)
# 備份配置文件
cp /etc/sysctl.conf /etc/sysctl.conf.bak
echo "已備份 /etc/sysctl.conf 為 /etc/sysctl.conf.bak"
# 刪除舊配置
echo "正在刪除舊配置..."
sed -i '/net.ipv4.tcp_no_metrics_save/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_ecn/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_frto/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_mtu_probing/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_rfc1337/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_sack/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_fack/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_window_scaling/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_adv_win_scale/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_moderate_rcvbuf/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_rmem/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_wmem/d' /etc/sysctl.conf
sed -i '/net.core.rmem_max/d' /etc/sysctl.conf
sed -i '/net.core.wmem_max/d' /etc/sysctl.conf
sed -i '/net.ipv4.udp_rmem_min/d' /etc/sysctl.conf
sed -i '/net.ipv4.udp_wmem_min/d' /etc/sysctl.conf
sed -i '/net.core.default_qdisc/d' /etc/sysctl.conf
sed -i '/net.ipv4.tcp_congestion_control/d' /etc/sysctl.conf
echo "舊配置已刪除。"
# 添加新配置
echo "正在添加新配置..."
cat >> /etc/sysctl.conf << EOF
net.ipv4.tcp_no_metrics_save=1
net.ipv4.tcp_ecn=0
net.ipv4.tcp_frto=0
net.ipv4.tcp_mtu_probing=0
net.ipv4.tcp_rfc1337=0
net.ipv4.tcp_sack=1
net.ipv4.tcp_fack=1
net.ipv4.tcp_window_scaling=1
net.ipv4.tcp_adv_win_scale=1
net.ipv4.tcp_moderate_rcvbuf=1
net.core.rmem_max=33554432
net.core.wmem_max=33554432
net.ipv4.tcp_rmem=4096 87380 33554432
net.ipv4.tcp_wmem=4096 16384 33554432
net.ipv4.udp_rmem_min=8192
net.ipv4.udp_wmem_min=8192
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF
echo "新配置已添加。"
# 檢查并安裝 sysctl
if ! command -v sysctl &> /dev/null; then
echo "sysctl 命令未安裝,正在自動安裝..."
if command -v apt &> /dev/null; then
apt update && apt install -y procps
elif command -v yum &> /dev/null; then
yum install -y procps-ng
elif command -v dnf &> /dev/null; then
dnf install -y procps-ng
else
echo "無法自動安裝 sysctl,請手動安裝 procps 或 procps-ng 包。"
exit 1
fi
echo "sysctl 已安裝。"
fi
# 確保 sysctl 在 PATH 中
export PATH=$PATH:/sbin:/usr/sbin
# 再次檢查 sysctl 是否存在
if ! command -v sysctl &> /dev/null; then
echo "錯誤:sysctl 命令仍未找到,請手動檢查系統。"
exit 1
fi
# 應用配置
echo "正在應用配置..."
if sysctl -p && sysctl --system; then
echo "配置已成功應用。"
else
echo "應用配置失敗,請檢查 /etc/sysctl.conf 文件。"
exit 1
fi
echo "TCP 優化完成!"
;;
q)
echo "再見!服務器推薦:www.asiayun.com"
break
;;
*)
echo "無效的選項,請重新輸入"
;;
esac
read -p "按回車鍵繼續..."
done
1. 本站所有資源來源于用戶上傳和網絡,如有侵權請郵件聯系站長!
2. 分享目的僅供大家學習和交流,您必須在下載后24小時內刪除!
3. 不得使用于非法商業用途,不得違反國家法律。否則后果自負!
4. 本站提供的源碼、模板、插件等等其他資源,都不包含技術服務請大家諒解!
5. 如有鏈接無法下載、失效或廣告,請聯系管理員處理!
6. 本站資源售價只是贊助,收取費用僅維持本站的日常運營所需!
7. 如遇到加密壓縮包,請使用WINRAR解壓,如遇到無法解壓的請聯系管理員!
8. 精力有限,不少源碼未能詳細測試(解密),不能分辨部分源碼是病毒還是誤報,所以沒有進行任何修改,大家使用前請進行甄別
TP源碼網 » Linux工具 CentOS 7更換AppStream源
TP源碼網 » Linux工具 CentOS 7更換AppStream源