菜鸟科技网

rsync启动命令参数如何正确配置?

下面我将从基础用法高级用法,并配合实际场景示例,为你详细讲解 rsync 的启动命令。

rsync启动命令参数如何正确配置?-图1
(图片来源网络,侵删)

核心语法结构

rsync 的命令基本结构如下:

rsync [选项] 源文件 目标文件
  • 选项:控制 rsync 的行为,如是否压缩、是否显示进度、是否删除目标端多余的文件等。
  • 源文件:可以是本地路径,也可以是远程路径(格式为 user@host:remote_path)。
  • 目标文件:同样可以是本地路径或远程路径。

关键点

  • 源路径和目标路径的结尾的斜杠 非常重要!
    • src/ (带斜杠):表示复制 src 目录内部到目标目录。
    • src (不带斜杠):表示复制 src 这个目录本身到目标目录。

常用选项详解

理解这些选项是掌握 rsync 的关键。

选项 缩写 描述
-a --archive 归档模式,这是最常用的选项,它相当于 -rlptgoD 的集合,保留了文件的所有属性(权限、时间戳、所有者、组等)。
-v --verbose 详细输出,在终端显示同步的文件列表,可以多次使用(如 -vv)来查看更详细的信息。
-z --compress 压缩传输,在传输过程中对文件进行压缩,可以减少网络带宽的占用,尤其是在传输大文件或慢速网络时非常有用。
-h --human-readable 人性化数字,以 KB, MB, GB 等格式显示文件大小,方便阅读。
--progress - 显示传输进度条,让你能看到每个文件的传输速度和剩余时间。
-n --dry-run 预演,只模拟将要执行的操作,而不会真正修改任何文件。强烈建议在执行重要操作前先使用此选项
--delete - 删除,删除目标端中存在但源端已不存在的文件。此操作非常危险,请谨慎使用!
--exclude - 排除文件,指定一个模式来排除不需要同步的文件或目录。--exclude "*.log"
--exclude-from - 从一个文件中读取需要排除的文件列表。
-e --rsh 指定远程 shell,默认是 ssh,你可以用它来指定不同的端口或使用其他 shell 程序。-e "ssh -p 2222"
-P - 等同于 --partial --progress--partial 会让 rsync保留部分传输的文件,方便中断后继续传输。
-u --update 更新,只在目标端的文件比源端旧时,才进行同步(跳过已更新的文件)。
-b --backup 备份,当目标文件被覆盖前,会先将其备份。
--backup-dir - 指定备份文件存放的目录。

常用场景及命令示例

场景1:本地目录同步(最简单)

/home/user/docs 目录同步到 /backup/docs

rsync启动命令参数如何正确配置?-图2
(图片来源网络,侵删)
# 基础同步(会创建 /backup/docs 目录,并将 docs 内部内容同步进去)
rsync -av /home/user/docs/ /backup/docs
# 如果想同步整个目录(即 /backup 目录下会多一个名为 docs 的目录)
rsync -av /home/user/docs /backup
# 带进度条和压缩的本地同步
rsync -avzP /home/user/large_files/ /mnt/external_drive/large_files/

场景2:远程目录同步(核心用法)

这是 rsync 最强大的功能之一。

从远程服务器拉取文件到本地:

# 从远程服务器的 /home/user/docs 拉取到本地的 /backup/docs
rsync -avz user@remote_server_ip:/home/user/docs/ /backup/docs
# 指定 SSH 端口(如果不是默认的 22)
rsync -avz -e "ssh -p 2222" user@remote_server_ip:/home/user/docs/ /backup/docs

从本地推送文件到远程服务器:

# 将本地的 /home/user/docs 推送到远程服务器的 /backup/docs
rsync -avz /home/user/docs/ user@remote_server_ip:/backup/docs
# 使用更快的压缩算法(如果两端都支持)
rsync -avz -e "ssh -p 2222" --compress-level=9 /home/user/docs/ user@remote_server_ip:/backup/docs

场景3:创建镜像(精确同步)

这是制作服务器备份或网站镜像的常用方法。--delete 选项确保目标目录和源目录完全一致。

rsync启动命令参数如何正确配置?-图3
(图片来源网络,侵删)

警告:--delete 会删除目标端多余的文件,请务必先用 -n (dry-run) 测试!

# 预演:查看将要执行的操作,特别是哪些文件会被删除
rsync -avzn --delete user@remote_server_ip:/var/www/ /local_mirror/www/
# 确认无误后,执行真正的同步
rsync -avz --delete user@remote_server_ip:/var/www/ /local_mirror/www/

场景4:排除特定文件或目录

在同步时,通常不需要同步日志文件、临时文件或 .git 目录。

# 排除所有 .log 文件和 tmp 目录
rsync -avz --exclude='*.log' --exclude='tmp' /source/ /destination/
# 排除多个文件类型(使用通配符)
rsync -avz --exclude={'*.tmp', '*.bak'} /source/ /destination/
# 从一个文件中读取排除规则(推荐用于复杂的排除列表)
# 创建一个文件 exclude.txt,内容如下:
# *.log
# .git/
# tmp/
# node_modules/
rsync -avz --exclude-from='exclude.txt' /source/ /destination/

场景5:设置定时任务(Cron Job)

使用 rsync 进行自动化备份是最佳实践。

  1. 创建一个备份脚本/home/user/scripts/backup.sh

    #!/bin/bash
    # 设置变量
    SOURCE_DIR="/home/user/docs"
    DEST_USER="backup_user"
    DEST_SERVER="backup.server.com"
    DEST_DIR="/backups/user_docs_$(date +%Y%m%d)"
    # 执行 rsync
    rsync -avz --delete -e "ssh -i /home/user/.ssh/backup_key" "$SOURCE_DIR/" "${DEST_USER}@${DEST_SERVER}:${DEST_DIR}"
    echo "Backup completed at $(date)"
  2. 给脚本添加可执行权限

    chmod +x /home/user/scripts/backup.sh
  3. 编辑 crontab

    crontab -e
  4. 添加一行来每天凌晨2点执行备份

    0 2 * * * /home/user/scripts/backup.sh >> /var/log/my_backup.log 2>&1

    这行命令的意思是:每天()凌晨2点(0 2),执行 /home/user/scripts/backup.sh 脚本,并将标准输出和错误输出都追加到 /var/log/my_backup.log 文件中。


最佳实践总结

  1. 总是从 -n (dry-run) 开始:在对生产环境或重要数据进行操作前,先用 -n 预演,确认操作符合预期。
  2. 使用 -a (archive):在大多数情况下,-a 是最佳选择,因为它能完整地保留文件属性。
  3. 善用 -v-h-vh 组合能让你清楚地看到正在同步什么以及文件大小。
  4. 网络环境差用 -z:对于跨网络或大文件传输,-z 可以显著提高速度。
  5. 谨慎使用 --delete:这个功能强大但危险,确保你真的需要它,并且已经通过 -n 测试过。
  6. 为自动化配置 SSH 密钥登录:在设置定时任务时,配置好 SSH 免密登录,避免脚本因密码输入而中断。
  7. 使用 --exclude 过滤无用文件:保持同步的干净和高效,避免同步日志、缓存等不需要的文件。

希望这份详细的指南能帮助你全面掌握 rsync 的启动命令!

分享:
扫描分享到社交APP
上一篇
下一篇