Slackware 实用脚本示例:从系统更新到备份恢复,解决新手配置难题与日常维护痛点

Slackware Linux 作为现存最古老的 Linux 发行版,以其极简主义、稳定性和遵循 UNIX 哲学而闻名。然而,这种“不加修饰”的特性也意味着它缺乏现代发行版中常见的自动化配置工具(如 Ubuntu 的
apt
或 Fedora 的
dnf
及其底层的包依赖自动处理)。对于新手而言,这既是学习 Linux 底层运作的绝佳机会,也是一个巨大的挑战。
本文旨在提供一套实用的 Shell 脚本示例,涵盖 Slackware 的系统更新、日常维护、配置自动化以及备份恢复。这些脚本不仅能解决新手的痛点,也能为老手提供高效的管理思路。
一、 Slackware 包管理基础与更新痛点
在编写脚本之前,我们需要了解 Slackware 的包管理核心工具:
installpkg
: 安装
.txz
包。
removepkg
: 移除已安装的包。
upgradepkg
: 升级包(通常使用
upgradepkg –install-new –reinstall *.txz
)。
slackpkg
: Slackware 官方提供的半自动化更新工具,用于从官方镜像下载和安装更新。
痛点分析
:
依赖地狱
:Slackware 默认不强制检查依赖。新手安装软件时,常因缺少依赖库而报错。
配置文件覆盖
:升级软件包时,如果修改了配置文件,
installpkg
会询问是否覆盖,但在批量更新时容易误操作。
内核更新
:Slackware 更新内核后,需要手动更新 LILO/GRUB 配置,新手极易忘记导致无法启动。
二、 智能系统更新脚本:Safe-Upgrade
这个脚本是对
slackpkg
的封装。它解决了新手最担心的两个问题:
配置文件丢失
和
更新后忘记运行 LILO
。
脚本功能
备份关键配置文件。
调用
slackpkg
进行更新。
自动检测内核变更并提示运行
lilo
。
清理旧内核包。
脚本代码
#!/bin/bash
# 文件名: safe_upgrade.sh
# 功能: 安全更新 Slackware 并处理关键步骤

# 颜色定义
RED=’\033[0;31m’
GREEN=’\033[0;32m’
YELLOW=’\033[1;33m’
NC=’\033[0m’ # No Color

# 1. 检查是否为 root 用户
if [ “$EUID” -ne 0 ]; then
echo -e “${RED}错误: 此脚本必须以 root 权限运行。${NC}”
exit 1
fi

# 定义关键配置文件备份目录
BACKUP_DIR=”/root/config_backups/$(date +%Y%m%d)”
mkdir -p “$BACKUP_DIR”

echo -e “${GREEN}=== Slackware 安全更新助手 ===${NC}”
echo “备份目录: $BACKUP_DIR”

# 2. 备份关键配置文件 (防止 upgradepkg 覆盖)
echo -e “${YELLOW}[1/4] 正在备份关键配置…${NC}”
cp -v /etc/fstab “$BACKUP_DIR/”
cp -v /etc/lilo.conf “$BACKUP_DIR/”
cp -v /etc/slackpkg/mirrors “$BACKUP_DIR/”
cp -v /etc/passwd “$BACKUP_DIR/”
cp -v /etc/shadow “$BACKUP_DIR/”
echo “备份完成。”

# 3. 运行 slackpkg 更新
echo -e “${YELLOW}[2/4] 正在更新软件包列表…${NC}”
slackpkg update

echo -e “${YELLOW}[3/4] 正在升级所有软件包 (Newbies: 请留意屏幕提示,遇到配置文件覆盖建议选 N,除非你确定要覆盖)…${NC}”
# –install-new: 安装新包, –reinstall: 重装已存在包
slackpkg upgrade-all –install-new –reinstall

# 4. 内核更新检查与 LILO 提示
# 检查 /boot 下是否有新内核镜像,且 lilo.conf 尚未包含
echo -e “${YELLOW}[4/4] 检查内核更新状态…${NC}”
if [ -f /boot/vmlinuz.new ]; then
echo -e “${RED}检测到新内核 (/boot/vmlinuz.new)!${NC}”
echo “————————————————”
echo “请手动编辑 /etc/lilo.conf 以包含新内核配置。”
echo “通常步骤:”
echo “1. mv /boot/vmlinuz /boot/vmlinuz.old”
echo “2. mv /boot/vmlinuz.new /boot/vmlinuz”
echo “3. 检查 /etc/lilo.conf 中的 image=/boot/vmlinuz 是否指向正确”
echo “4. 运行 ‘lilo’ 命令”
echo “————————————————”

read -p “是否现在运行 ‘lilo’ 并重启? (y/N): ” confirm
if [[ $confirm == [yY] ]]; then
lilo
echo -e “${GREEN}LILO 已运行。请重启系统。${NC}”
read -p “立即重启? (y/N): ” reboot_confirm
if [[ $reboot_confirm == [yY] ]]; then
reboot
fi
fi
else
echo -e “${GREEN}未检测到内核变更。${NC}”
fi

# 5. 清理旧包
echo -e “${GREEN}更新完成。建议运行 ‘slackpkg clean’ 清理下载缓存。${NC}”
使用说明
将代码保存为
safe_upgrade.sh
。
chmod +x safe_upgrade.sh
。
./safe_upgrade.sh
。
注意
:在
slackpkg upgrade-all
过程中,如果询问是否覆盖
/etc/passwd
等敏感文件,
除非你明确知道自己在做什么,否则通常选择保留旧文件(按 N 或 K)
。
三、 新手配置神器:自动化安装第三方软件 (SBopkg)
Slackware 官方仓库保守且精简。新手通常需要安装浏览器、多媒体解码器等。
sbopkg
是 Slackware 社区的非官方包管理器,它能从 SBo (SlackBuilds) 仓库编译软件。
痛点
:手动下载 SlackBuilds、解压、编译、安装流程繁琐。
脚本功能
自动化安装
sbopkg
,并配置其使用 rsync 同步仓库,最后安装一个常用软件(例如
vlc
)作为演示。
脚本代码
#!/bin/bash
# 文件名: setup_sbopkg.sh
# 功能: 自动化配置 sbopkg 及安装常用软件

if [ “$EUID” -ne 0 ]; then
echo “请使用 root 运行”
exit 1
fi

SBOPKG_URL=”http://www.sbopkg.org/downloads/sbopkg-0.38.2-noarch-1_wsr.txz”

echo “=== Slackware 第三方软件源 (SBo) 配置助手 ===”

# 1. 检查并下载 sbopkg
if ! command -v sbopkg &> /dev/null; then
echo “正在下载 sbopkg…”
wget -O /tmp/sbopkg.txz $SBOPKG_URL

if [ $? -eq 0 ]; then
installpkg /tmp/sbopkg.txz
echo “sbopkg 安装成功。”
else
echo “下载失败,请检查网络。”
exit 1
fi
else
echo “sbopkg 已安装。”
fi

# 2. 首次运行配置 (同步 SBo 仓库)
# 这里我们使用 expect 或者直接通过配置文件静默处理,为了通用性,我们直接调用命令
# 注意:sbopkg 首次运行会询问是否同步,我们通过管道回答
echo “正在同步 SBo 仓库 (这可能需要一些时间)…”
yes | sbopkg -r

# 3. 安装示例软件:VLC (多媒体播放器)
# 使用 -i 参数:下载、构建并安装
# 使用 -e 参数:即使有依赖警告也继续(新手需谨慎,这里仅作演示)
echo “准备安装 VLC (请确保有足够的磁盘空间用于编译)…”
# 这里的 -e 标志用于忽略依赖检查(因为 sbopkg 本身不处理二进制依赖,需要手动处理或确保已安装基础包)
# 实际生产中,建议先安装 ffmpeg 等依赖
sbopkg -i vlc

echo “安装完成。如果 VLC 无法启动,请检查是否缺少 QT 或 FFmpeg 库。”
四、 日常维护痛点:日志轮转与磁盘空间清理
Slackware 默认使用
newsyslog
管理日志,但不像 systemd 发行版那样自动清理得那么“智能”。新手常遇到
/var
分区爆满导致系统无法登录的问题。
脚本功能
检查
/var
和
/tmp
的使用率。
手动清理旧的 log 文件。
清理编译过程中产生的临时文件。
脚本代码
#!/bin/bash
# 文件名: slack_maintenance.sh
# 功能: 磁盘空间检查与日志清理

THRESHOLD=80 # 警告阈值 80%
PARTITIONS=”/var /tmp /home”

echo “=== Slackware 磁盘维护检查 ===”

# 1. 检查分区使用率
for part in $PARTITIONS; do
if [ -d “$part” ]; then
USAGE=$(df -h $part | awk ‘NR==2 {print $5}’ | sed ‘s/%//’)
if [ “$USAGE” -gt “$THRESHOLD” ]; then
echo -e “\033[0;31m[警告] 分区 $part 已使用 ${USAGE}% \033[0m”

# 如果是 /var,提示清理日志
if [ “$part” == “/var” ]; then
echo ” -> 建议清理 /var/log 下的旧文件”
# 列出最大的日志文件
du -sh /var/log/* 2>/dev/null | sort -hr | head -n 5
fi
else
echo -e “\033[0;32m[正常] 分区 $part 使用率: ${USAGE}% \033[0m”
fi
fi
done

# 2. 深度清理 /tmp
echo “正在清理 /tmp 中超过 7 天未访问的文件…”
find /tmp -type f -atime +7 -delete
find /tmp -type d -empty -mtime +7 -delete

# 3. 清理 Slackware 源码包缓存 (如果用户使用 slackpkg 或手动下载)
echo “清理 /var/cache/packages…”
rm -f /var/cache/packages/*.txz

# 4. 清理 SlackBuilds 编译目录 (通常在 /tmp/SBo)
if [ -d “/tmp/SBo” ]; then
echo “检测到 /tmp/SBo 目录,正在清理编译残留…”
rm -rf /tmp/SBo/*
echo “已清理。”
fi

echo “维护完成。”
五、 灾难恢复:简易系统快照脚本
Slackware 没有像 Btrfs Snapshot 或 Timeshift 那样的开箱即用工具。对于新手,最实用的备份策略是
备份关键配置文件
和
用户数据
。
脚本功能
创建一个包含系统关键配置和用户主目录的压缩包。这在你搞乱了系统配置(如 Xorg 或 KDE 配置)时可以快速回滚。
脚本代码
#!/bin/bash
# 文件名: slack_snapshot.sh
# 功能: 创建系统配置快照

BACKUP_NAME=”slackware_snapshot_$(date +%Y%m%d_%H%M).tar.gz”
DEST_DIR=”/mnt/backup” # 请确保此目录存在且有足够空间,建议挂载到外部硬盘

if [ “$EUID” -ne 0 ]; then
echo “请使用 root 运行”
exit 1
fi

if [ ! -d “$DEST_DIR” ]; then
echo “错误: 备份目标目录 $DEST_DIR 不存在。”
echo “请挂载外部硬盘并修改脚本中的 DEST_DIR,或手动创建该目录。”
exit 1
fi

echo “=== 创建 Slackware 系统快照 ===”
echo “目标: $DEST_DIR/$BACKUP_NAME”

# 定义要备份的目录/文件列表
# 这里精选了最核心的配置,避免备份庞大的二进制文件
INCLUDE_LIST=(
“/etc”
“/home”
“/root”
“/var/lib/pkgtools/packages” # 已安装包数据库
“/usr/local” # 用户自装软件
)

# 构建 tar 命令参数
TAR_PARAMS=”-czvf $DEST_DIR/$BACKUP_NAME”

for item in “${INCLUDE_LIST[@]}”; do
if [ -e “$item” ]; then
TAR_PARAMS=”$TAR_PARAMS $item”
else
echo “警告: $item 不存在,跳过。”
fi
done

echo “正在打包…”
# –exclude 参数用于排除不必要的大文件,例如 /home 下的下载目录、缓存等
tar $TAR_PARAMS \
–exclude=”/home/*/Downloads” \
–exclude=”/home/*/cache” \
–exclude=”/var/log” \
–exclude=”/tmp”

if [ $? -eq 0 ]; then
echo -e “\033[0;32m备份成功! 文件位于: $DEST_DIR/$BACKUP_NAME\033[0m”
echo “文件大小: $(du -h $DEST_DIR/$BACKUP_NAME | cut -f1)”
else
echo -e “\033[0;31m备份失败,请检查权限或磁盘空间。\033[0m”
fi
如何恢复
:
如果系统崩溃,只需进入 Live CD 环境,挂载你的根分区和备份盘,然后执行:
# 假设挂载到了 /mnt/sys 和 /mnt/backup
tar -xzvf /mnt/backup/slackware_snapshot_xxxx.tar.gz -C /mnt/sys
这将把配置文件还原到你之前的状态。
六、 总结
Slackware 的魅力在于掌控感。通过上述脚本,新手可以将繁琐的手动操作转化为一键执行的任务:
Safe-Upgrade
解决了更新时的不安全感,特别是内核和 LILO 的处理。
Setup_sbopkg
开启了 Slackware 的软件生态大门。
Maintenance
防止了因磁盘爆满导致的系统故障。
Snapshot
提供了低成本的系统回滚方案。
建议将这些脚本放入
/usr/local/bin
或
/root/scripts
中,并设置别名(alias),例如
alias sup=’~/scripts/safe_upgrade.sh’
,让 Slackware 的维护变得像现代发行版一样顺手。