Linux配置自动备份核心是精准捕获关键配置项,依赖带校验、清理和日志的轻量脚本+crontab定时触发;需备份/etc、/boot/grub2、/root/.bashrc等,排除动态文件,并显式声明PATH及使用绝对路径命令。

Linux 中配置变更自动备份,核心是只捕获真正会变、丢了难恢复的配置项,而不是全盘镜像。它依赖一个轻量但带校验的脚本 + crontab 定时触发,且必须绕过 crontab 默认极简环境带来的各种静默失败。
只备份哪些路径才真正有用
系统配置分散,但多数不需要备份。重点锁定这几类:
-
/etc/:绝大多数服务配置(ssh、nginx、systemd、hosts、fstab)都在这里;可整体打包,但要排除动态生成文件 -
/boot/grub2/(或/boot/grub/):GRUB 启动参数和菜单配置,重装系统后常需手动还原 -
/root/.bashrc、/root/.vimrc等管理员环境文件:影响日常操作效率,值得单独存档
明确跳过这些:
-
/etc/mtab、/etc/network/run/:运行时生成,每次重启都不同 -
/etc/logrotate.status:logrotate 自己管理,无需重复备份 -
/etc/ssl/private/:含私钥,应单独加密导出,不混入普通备份包
脚本里必须写绝对路径和显式 PATH
crontab 执行时不读 ~/.bashrc,PATH 默认只有 /usr/bin:/bin,很多命令(比如 tar、find)会直接报 command not found。
脚本开头必须这样写:
#!/bin/bash PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin; export PATH
所有命令调用也得用绝对路径:
- 用
/bin/tar而不是tar - 用
/usr/bin/find而不是find - 用
/bin/date而不是date
否则脚本手动能跑,crontab 里就静默失败。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
压缩时用 --exclude 过滤掉不该进包的内容
直接 tar -czf 整个 /etc 很快就会因日志、锁文件、临时状态导致备份体积膨胀甚至失败。
示例命令(注意空格和引号):
/bin/tar -zcf "$BACKUP_DIR/config_$(/bin/date +\%Y\%m\%d_\%H\%M).tar.gz" \ --exclude='/etc/mtab' \ --exclude='/etc/logrotate.status' \ --exclude='/etc/network/run' \ --exclude='/etc/ssl/private' \ /etc /boot/grub2 /root/.bashrc /root/.vimrc
关键点:
-
--exclude参数必须写在源路径之前 - 每个
--exclude单独一行或用\换行,避免 shell 解析错误 - 路径以
/开头,否则tar会按相对路径匹配,容易漏掉
校验 + 清理 + 日志缺一不可
没校验的备份等于没备份;没清理的备份迟早撑爆磁盘;没日志的执行等于黑盒。
三件事必须写进脚本末尾:
- 校验:
if ! /bin/tar -tzf "$BACKUP_FILE" >/dev/null 2>&1; then echo "$(date): ERROR: $BACKUP_FILE corrupt" >> /var/log/backup.log; exit 1; fi - 清理:
/usr/bin/find "$BACKUP_DIR" -name "config_*.tar.gz" -mtime +14 -delete(配置变更频率低,保留 14 天比日志备份更合理) - 日志:
echo "$(date): backup done → $BACKUP_FILE" >> /var/log/backup.log
同时在 crontab 条目末尾加重定向:30 1 * * * /usr/local/bin/backup-config.sh >> /var/log/backup.log 2>&1,确保 stderr 也落盘。
最易被忽略的是:脚本手动跑通 ≠ crontab 跑通。必须用 sudo systemctl status cron 确认服务在运行,并检查 /var/log/backup.log 里有没有“command not found”或权限拒绝这类线索。

















