rsync
概述
rsync 是用于高效文件同步的标准工具。它仅传输文件中已更改的部分(增量传输),支持 SSH,处理文件权限,并适用于备份、部署和目录镜像。
操作说明
步骤1:基础用法
# 同步本地目录
rsync -avz source/ destination/
# -a = 归档模式(保留权限、时间戳、符号链接)
# -v = 详细输出
# -z = 传输时压缩
# 同步到远程服务器
rsync -avz ./dist/ deploy@server:/var/www/myapp/
# 从远程同步
rsync -avz deploy@server:/var/log/myapp/ ./logs/
# 试运行(显示将要更改的内容,但不实际执行)
rsync -avzn source/ destination/
步骤2:常见模式
# 部署网站(删除目标中不存在的源文件)
rsync -avz --delete ./build/ deploy@server:/var/www/site/
# 带排除项的备份
rsync -avz --exclude='node_modules' --exclude='.git' --exclude='.env' \
/opt/myapp/ /backups/myapp/
# 使用硬链接的增量备份(节省空间)
rsync -avz --link-dest=/backups/latest \
/opt/myapp/ /backups/$(date +%Y%m%d)/
ln -snf /backups/$(date +%Y%m%d) /backups/latest
# 带宽限制(适用于大文件传输)
rsync -avz --bwlimit=5000 source/ destination/ # 5000 KB/s
步骤3:部署脚本
#!/bin/bash
# scripts/deploy.sh — 使用 rsync 部署应用
SERVER="[email protected]"
REMOTE_DIR="/var/www/myapp"
echo "正在构建..."
npm run build
echo "正在同步文件..."
rsync -avz --delete \
--exclude='node_modules' \
--exclude='.env' \
--exclude='.git' \
./dist/ ${SERVER}:${REMOTE_DIR}/
echo "正在重启服务..."
ssh ${SERVER} "sudo systemctl restart myapp"
echo "部署完成!"
使用指南
- 使用
--delete时,务必先用-n(试运行)以避免意外数据丢失。 - 尾部斜杠至关重要:
source/同步目录内容,source同步目录本身。 - 对于大文件传输,添加
--progress以查看每个文件的进度。 - rsync 通过 SSH 传输时默认加密——适用于互联网传输。