← Back

Bash 脚本合集

一组实用的 Linux 服务器运维与日常使用脚本。


系统优化

1. 开启 BBR

开启 TCP BBR 拥塞控制算法,提升网络传输性能。脚本会自动检测内核是否支持 BBR(需要 Linux 内核 >= 4.9),支持临时启用和永久启用两种方式。

标签: bbr

#!/bin/bash
# 只处理 BBR 开/关 + 检测
# 支持大多数现代 Linux (内核 ≥4.9)

set -e

# ======================
# 颜色
# ======================
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

info()  { echo -e "${GREEN}[INFO]${NC} $1"; }
warn()  { echo -e "${YELLOW}[WARN]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1" >&2; exit 1; }

# ======================
# 检查内核是否支持 tcp_bbr
# ======================
check_bbr_support() {
    if ! modinfo tcp_bbr >/dev/null 2>&1; then
        error "当前内核没有 tcp_bbr 模块(需要 Linux 内核 ≥ 4.9)"
    fi
}

# ======================
# 获取当前拥塞控制算法
# ======================
get_current_cc() {
    sysctl -n net.ipv4.tcp_congestion_control 2>/dev/null || echo "unknown"
}

# ======================
# 判断 BBR 是否已启用
# ======================
is_bbr_enabled() {
    local cc
    cc=$(get_current_cc)
    [ "$cc" = "bbr" ]
}

# ======================
# 显示当前状态
# ======================
show_status() {
    local cc=$(get_current_cc)
    local avail=$(sysctl -n net.ipv4.tcp_available_congestion_control 2>/dev/null)

    echo
    if [[ "$cc" = "bbr" ]]; then
        echo -e "${GREEN}当前已使用 BBR${NC}"
    elif [[ "$avail" =~ "bbr" ]]; then
        echo -e "${YELLOW}BBR 模块可用,但当前未启用(当前: $cc)${NC}"
    else
        echo -e "${RED}BBR 不可用(模块缺失或内核太旧)${NC}"
    fi
    echo "当前拥塞控制 : $cc"
    echo "可用算法       : $avail"
    echo
}

# ======================
# 临时启用 BBR(本次开机有效)
# ======================
enable_bbr_temp() {
    info "临时启用 BBR(本次重启后失效)..."
    modprobe tcp_bbr 2>/dev/null || true
    sysctl -w net.ipv4.tcp_congestion_control=bbr
    if is_bbr_enabled; then
        info "临时启用成功"
    else
        warn "临时启用失败,请检查内核模块"
    fi
}

# ======================
# 永久启用 BBR(推荐)
# ======================
enable_bbr_permanent() {
    info "设置永久启用 BBR..."

    # 加载模块(开机自动加载)
    if [[ -d /etc/modules-load.d ]]; then
        echo "tcp_bbr" | tee /etc/modules-load.d/tcp_bbr.conf >/dev/null
    elif [[ -f /etc/modules ]]; then
        grep -q "^tcp_bbr$" /etc/modules || echo "tcp_bbr" >> /etc/modules
    fi

    # sysctl 配置
    local conf="/etc/sysctl.d/98-tcp-bbr.conf"
    cat > "$conf" << 'EOF'
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
EOF

    sysctl -p "$conf" 2>/dev/null || true
    info "已写入配置:$conf"
    info "重启后完全生效(或手动执行:sysctl -p $conf)"
}

# ======================
# 主逻辑
# ======================
main() {
    check_bbr_support
    show_status

    if is_bbr_enabled; then
        warn "BBR 已经启用,无需操作。"
        exit 0
    fi

    echo -n "是否现在启用 BBR?[y/N] "
    read -r answer
    if [[ ! "$answer" =~ ^[Yy]$ ]]; then
        info "已取消"
        exit 0
    fi

    enable_bbr_temp
    show_status

    echo -n "是否设置为永久启用(推荐)?[y/N] "
    read -r answer
    if [[ "$answer" =~ ^[Yy]$ ]]; then
        enable_bbr_permanent
    fi

    info "操作完成"
    echo "验证命令:"
    echo "  sysctl net.ipv4.tcp_congestion_control"
    echo "  lsmod | grep bbr"
}

main "$@"

手动验证命令:

# 查看当前是否在使用 bbr
sysctl net.ipv4.tcp_congestion_control

# 查看可用拥塞控制算法列表
sysctl net.ipv4.tcp_available_congestion_control

# 查看是否加载了 bbr 模块
lsmod | grep -i bbr

# 临时切换成 bbr(测试用)
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr

2. Debian 12 Bookworm 升级 Debian 13 Trixie

将 Debian 12 (Bookworm) 升级至 Debian 13 (Trixie)。先完成当前版本的完整更新,然后替换软件源并执行跨版本升级。

apt update
apt upgrade -y
apt full-upgrade -y
apt autoremove --purge -y
apt autoclean

sed -i 's/bookworm/trixie/g' /etc/apt/sources.list
find /etc/apt/sources.list.d/ -type f -name "*.list" -exec sed -i 's/bookworm/trixie/g' {} \;
find /etc/apt/sources.list.d/ -type f -name "*.sources" -exec sed -i 's/bookworm/trixie/g' {} \;

apt update
apt upgrade --without-new-pkgs -y
apt full-upgrade -y
apt autoremove --purge -y
apt autoclean

这个脚本"能用",社区里很多人这么干也成功了,但属于"简单粗暴快"类型,不是最稳妥的做法。 真正稳的做法是:先完整备份 → 更新到最新 bookworm → 手动/精细修改源(优先禁用第三方)→ 两阶段升级 → 升级后再处理第三方源和可能的冲突包。

如果你的机器只是个人桌面/测试服务器/干净 VPS,这个脚本大概率没问题;如果是重要生产环境,建议再谨慎一些。


3. 新增 SWAP

创建 2GB 的 SWAP 交换文件并永久挂载。

标签: swap

fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo "/swapfile swap swap defaults 0 0" | tee -a /etc/fstab

4. 更新 SWAP

删除旧的 SWAP 文件并重新创建,可用于扩容或缩小 SWAP 大小。

标签: swap

sudo swapoff /swapfile
sudo rm /swapfile
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo swapon --show

5. 优化 SWAP

优化 SWAP 使用和回收策略,让系统更倾向于用内存、更早更平滑地写回脏数据、尽量少碰 SWAP。在内存充足 + SSD 的 VPS 环境下,这是一种提升交互体验的常见且相对安全的调优方式。

标签: swap

#!/usr/bin/env bash

# ================== 虚拟内存优化脚本 ==================
# 适用于大多数现代 Linux 发行版
# 主要调整:降低 swap 使用倾向 + 优化脏页写回

set -euo pipefail

echo "正在优化虚拟内存参数..."

# 目标参数
cat <<'EOF' | sudo tee /etc/sysctl.d/99-vm-optimization.conf >/dev/null
# 降低使用 swap 的倾向(0=几乎不使用,100=积极使用swap)
vm.swappiness = 10

# 脏页占系统内存比例达到 20% 时触发进程主动回写
vm.dirty_ratio = 20

# 后台进程开始回写脏页的阈值(内存的 5%)
vm.dirty_background_ratio = 5

# 可选:加快脏页过期时间(默认 3000~5000 左右,根据需求可选开启)
# vm.dirty_expire_centisecs = 1500
# vm.dirty_writeback_centisecs = 500
EOF

echo "已写入配置到 /etc/sysctl.d/99-vm-optimization.conf"

# 立即生效(当前会话)
echo "立即应用设置..."
sudo sysctl -p /etc/sysctl.d/99-vm-optimization.conf

echo ""
echo "当前生效参数如下:"
echo "----------------------------------------"
sysctl vm.swappiness vm.dirty_ratio vm.dirty_background_ratio
echo "----------------------------------------"

echo ""
echo "优化完成!"
echo "这些设置会在重启后仍然有效(因为写入了 sysctl.d 目录)。"

软件安装

6. 安装 Docker

使用官方一键安装脚本安装 Docker。

标签: docker

curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh

验证安装:

docker run hello-world

生活工具

7. 获取天气

在终端中查看当前位置的天气信息。

curl -4 wttr.in

8. 获取 IP

在终端中查看当前公网 IP 及相关信息。

curl ip.im/info

其他

9. 性能测试

使用 bench.sh 进行服务器性能测试,包括 CPU、内存、磁盘 IO、网络速度等。

第三方项目:https://bench.sh/

apt update
apt install wget
curl -Lso- bench.sh | bash