菜单化操作:新增主菜单,支持选择「创建 Swap」或「删除 Swap」
独立删除 Swap 功能:
自动检测并停止正在运行的 Swap
删除
/swapfile交换文件清理
/etc/fstab中的 Swap 开机自启配置操作完成后显示当前系统状态,确认删除结果
安全确认:删除操作增加二次确认(标注「不可恢复」),防止误操作
状态检测:删除前检测是否存在 Swap 文件 / 配置,无相关内容时给出友好提示
脚本特点:
权限检查:确保以 root 权限运行
友好交互:彩色输出、清晰的提示信息
输入校验:支持 MB/GB 单位,验证输入有效性(最小 100MB)
安全处理:先停止并清理旧的 Swap,再创建新的
开机生效:自动写入
/etc/fstab兼容性强:优先使用
fallocate,兼容dd命令状态反馈:操作完成后显示新的 Swap 状态
使用方法:
保存脚本为
manage_swap.sh添加执行权限:
chmod +x manage_swap.sh运行脚本:
sudo ./manage_swap.sh根据菜单选择操作:
选
1:创建自定义大小的 Swap(保留原有功能)选
2:彻底删除所有 Swap(文件 + 配置)选
3:退出脚本
关键注意事项:
删除 Swap 后,系统将不再有交换空间,若物理内存不足可能导致程序崩溃
脚本仅处理
/swapfile类型的 Swap 文件,若你的系统使用 Swap 分区(如/dev/sda2),需手动处理删除操作完成后,可通过
free -h或swapon --show验证 Swap 是否完全清除创建 / 删除操作均会修改
/etc/fstab,确保开机配置同步更新
#!/bin/bash
# 定义颜色常量(增强交互体验)
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # 重置颜色
# 检查是否为 root 用户
check_root() {
if [ "$(id -u)" -ne 0 ]; then
echo -e "${RED}错误:必须以 root 权限运行此脚本!${NC}"
exit 1
fi
}
# 检查当前 Swap 状态
check_current_swap() {
echo -e "${BLUE}===== 当前 Swap 信息 =====${NC}"
swapon --show
if [ $? -ne 0 ]; then
echo -e "${YELLOW}当前系统未配置 Swap${NC}"
fi
echo -e "\n${BLUE}===== 内存和 Swap 总览 =====${NC}"
free -h
echo ""
}
# 获取有效的 Swap 大小输入
get_swap_size() {
while true; do
read -p "请输入要设置的 Swap 大小(单位:MB/GB,例如:2048MB 或 2GB):" SWAP_SIZE
# 校验输入格式
if [[ $SWAP_SIZE =~ ^[0-9]+(MB|GB)$ ]]; then
# 提取数字和单位
SIZE_NUM=$(echo $SWAP_SIZE | sed 's/[A-Za-z]*//g')
SIZE_UNIT=$(echo $SWAP_SIZE | sed 's/[0-9]*//g' | tr '[:lower:]' '[:upper:]')
# 转换为 MB 便于计算
if [ "$SIZE_UNIT" = "GB" ]; then
SWAP_SIZE_MB=$((SIZE_NUM * 1024))
else
SWAP_SIZE_MB=$SIZE_NUM
fi
# 检查最小值(至少 100MB)
if [ $SWAP_SIZE_MB -lt 100 ]; then
echo -e "${YELLOW}警告:Swap 大小建议不小于 100MB,请重新输入!${NC}"
continue
fi
break
else
echo -e "${RED}错误:输入格式无效!请按照示例格式输入(如:2048MB 或 2GB)${NC}"
fi
done
}
# 停止并删除现有 Swap(独立功能)
delete_swap() {
echo -e "${BLUE}===== 开始删除 Swap =====${NC}"
# 检查是否有启用的 Swap
if swapon --show | grep -q "swapfile"; then
echo -e "${BLUE}正在停止 Swap...${NC}"
swapoff -a
echo -e "${GREEN}已停止所有 Swap${NC}"
else
echo -e "${YELLOW}未检测到正在运行的 Swap${NC}"
fi
# 删除 swap 文件
if [ -f "/swapfile" ]; then
rm -f /swapfile
echo -e "${GREEN}已删除 /swapfile 文件${NC}"
else
echo -e "${YELLOW}未找到 /swapfile 文件${NC}"
fi
# 从 fstab 中移除 swap 配置
if grep -q "swapfile" /etc/fstab; then
sed -i '/swapfile/d' /etc/fstab
echo -e "${GREEN}已清理 /etc/fstab 中的 Swap 配置${NC}"
else
echo -e "${YELLOW}/etc/fstab 中无 Swap 相关配置${NC}"
fi
echo -e "\n${GREEN}===== Swap 删除完成 =====${NC}"
check_current_swap
}
# 创建新的 Swap
create_new_swap() {
echo -e "${BLUE}===== 开始创建新 Swap =====${NC}"
# 先清理旧的 Swap
delete_swap
# 创建 swap 文件(fallocate 优先,失败则用 dd)
echo -e "${BLUE}正在创建 ${SWAP_SIZE} 的 Swap 文件...${NC}"
if command -v fallocate &> /dev/null; then
fallocate -l $SWAP_SIZE /swapfile
else
dd if=/dev/zero of=/swapfile bs=1M count=$SWAP_SIZE_MB
fi
# 设置正确的权限
chmod 600 /swapfile
mkswap /swapfile
# 启用新 swap
swapon /swapfile
# 写入 fstab 确保开机生效
echo "/swapfile none swap defaults 0 0" >> /etc/fstab
echo -e "${GREEN}===== Swap 创建完成 =====${NC}"
echo -e "新的 Swap 大小:${SWAP_SIZE}"
echo -e "当前 Swap 状态:"
swapon --show
free -h | grep -E "Swap|交换"
}
# 显示主菜单
show_menu() {
clear
echo -e "${BLUE}=============================${NC}"
echo -e "${BLUE} Linux Swap 管理工具 ${NC}"
echo -e "${BLUE}=============================${NC}"
echo ""
check_current_swap
echo -e "${YELLOW}请选择操作:${NC}"
echo "1. 创建自定义大小的 Swap"
echo "2. 彻底删除所有 Swap(文件+配置)"
echo "3. 退出"
echo ""
read -p "请输入选项 [1-3]:" CHOICE
}
# 主流程
main() {
# 权限检查
check_root
while true; do
show_menu
case $CHOICE in
1)
# 确认创建
read -p "是否确认创建新的 Swap?(y/N):" CONFIRM
if [[ $CONFIRM =~ ^[Yy]$ ]]; then
get_swap_size
create_new_swap
else
echo -e "${YELLOW}创建操作已取消${NC}"
fi
;;
2)
# 确认删除
read -p "是否确认删除所有 Swap?此操作不可恢复!(y/N):" CONFIRM
if [[ $CONFIRM =~ ^[Yy]$ ]]; then
delete_swap
else
echo -e "${YELLOW}删除操作已取消${NC}"
fi
;;
3)
echo -e "${GREEN}感谢使用,再见!${NC}"
exit 0
;;
*)
echo -e "${RED}错误:无效的选项,请输入 1-3 之间的数字!${NC}"
;;
esac
# 操作完成后等待用户确认
echo ""
read -p "按任意键返回菜单..."
done
}
# 启动主流程
main