Shell脚本迁移系统配置的核心是将手动操作转化为可复用、可验证的自动化流程,关键在于覆盖全、路径准、权限对、依赖清,优先处理用户级和系统级关键配置,忽略缓存日志等临时文件,通过安全打包校验、精准还原适配及交互式封装实现可靠迁移。

用 Shell 脚本迁移系统配置,核心是把重复的手动操作变成可复用、可验证的自动化流程。关键不在写得多 fancy,而在覆盖全、路径准、权限对、依赖清。
明确要迁移的配置范围
不是所有文件都适合直接复制。优先处理用户级和系统级的关键配置:
- 用户环境:~/.bashrc、~/.vimrc、~/.gitconfig、~/.ssh/config 及 authorized_keys
- 系统服务:/etc/nginx/nginx.conf、/etc/systemd/system/*.service(注意启用状态需单独导出)
- 包管理状态:apt list --installed > pkg-list.txt(Debian/Ubuntu),或 rpm -qa > pkg-list.txt(RHEL/CentOS)
- 忽略缓存、日志、临时文件:如 /var/log、/tmp、~/.cache 等目录不纳入备份
用脚本安全打包与校验
打包前先检查路径是否存在,避免静默失败;压缩时保留权限和符号链接:
- 用
tar --create --gzip --owner=root --group=root --preserve-permissions打包 - 生成 SHA256 校验值:
sha256sum config-backup.tar.gz > config-backup.sha256 - 脚本中加入
set -e和set -u,确保任意命令失败即退出,变量未定义即报错
目标机上精准还原与适配
还原不是简单解压,需考虑差异:用户名、主机名、IP、硬件路径等可能不同:
- 解压后用
sed -i替换配置中的旧主机名或 IP(例如sed -i 's/old-hostname/new-hostname/g') - systemd 服务启用状态需手动恢复:
systemctl enable xxx.service,不能仅靠文件存在 - ~/.ssh 目录权限必须为 700,私钥文件为 600,脚本中加
chmod 700 ~/.ssh; chmod 600 ~/.ssh/id_rsa
封装成可交互的迁移工具
加简单菜单和参数支持,提升复用性:
- 支持
./migrate.sh --backup或--restore模式 - 自动检测发行版(
lsb_release -is或/etc/os-release),选择对应包列表还原命令 - 提示用户确认关键操作,如覆盖现有配置、重启服务等,加
read -p "确认继续?[y/N] " -n 1 -r
不复杂但容易忽略:每次迁移后建议在新环境跑一遍基础验证,比如 source ~/.bashrc && echo $PATH、nginx -t、systemctl is-active nginx。脚本只是搬运工,最终是否生效还得看配置本身是否兼容新环境。


















