rsync 命令简介

使用 rsync 更轻松更快速地同步两台机器(比如笔记本计算机和桌面计算机),这提供一种高效的算法和多种选项。另外,如果不喜欢命令行操作,还可以通过几个图形化工具更简便地使用 rsync

如果您同时使用笔记本计算机和桌面计算机,就可能需要及时地同步它们。另外,除了在家里运行同步之外,还可能希望从远程站点运行同步;就拿我来说,我在旅途中使用笔记本计算机,在此期间希望确保把在笔记本上做的工作备份到桌面计算机上。(丢失笔记本并因此丢失所有工作是真正的大灾难!)对于这个问题有许多解决方案:本文介绍一种工具 — rsync — 和几种相关工具,它们都提供简便的同步过程。

什么是 rsync?

rsync 应用程序是在 Linux® 和 UNIX® 上广泛使用的文件传输和同步程序,而且它已经移植到了 Windows® 上。它的关键特性是一个非常快的算法,它只通过数据链路发送文件差异,因此把机器之间传输的数据总量降低到最低限度。(如果使用 File Transfer Protocol [FTP] 或 rcpscp 等实用程序,那么即使只修改了一个字节,也会发送完整的文件)。当然,rsync 并非只能处理现有的文件:它还可以处理只在链路一端存在的文件和目录。最后,通过压缩数据来优化通信,因此可以通过非宽带连接使用这个工具。

获取并安装 rsync

可以找到针对大多数当前 Linux 发行版预编译的二进制包,首先应该找到适合自己的包。我使用 Smart 对 OpenSUSE 进行包管理,所以只需使用 sudo smart install rsync 命令安装 rsync 的最新版本。如果您喜欢自己进行编译,那么可以获取源代码并用传统的 configure, make, make install 方法安装它;详细步骤参见源代码中的 README 文件。

为了进行安全的通信,需要安装 Secure Shell (ssh)。(可以使用 remote shell [rsh],但是它不够安全)。OpenSSH 是 ssh 的一种免费实现,在所有发行版上都有。还需要在防火墙上打开一个端口,让计算机可以相互连接。

使用 rsync

现在,我们使用 rsync 把笔记本计算机直接同步到一个远程服务器。为此,可以使用与 清单 1 相似的代码。还可以把远程服务器同步到笔记本(文件将从服务器发送到笔记本),或者同步两个本地目录,但是不能同步两个远程服务器。

 

清单 1. 相同 rsync 命令的两个版本

 

注意,清单 1 中选项的次序是任意的,而且大多数选项有短格式。首先,--compress(或 -z)指定将压缩数据,这可以节省带宽。应该总是使用这个选项。(在非常高速的数据链路上,不进行压缩可能也可以,但是对于大多数远程连接,压缩都是有帮助的)。可以使用补充选项 --compress-level=level 指定压缩的级别;但是,通常可以接受标准的压缩级别。

--recursive (-r) 选项让 rsync 递归地复制所有目录。这会复制目录中的所有文件,包括其中的子目录及其内容。如果不需要这个功能,可以使用 --dirs 选项 (-d) 产生相反的效果:跳过子目录及其内容。

在默认情况下,rsync 把需要的文件复制到目标计算机,但是并不删除额外文件。通过使用 --delete 选项,目标目录会与原目录保持完全一致。但是要注意:如果把一个空目录同步到远程目录,就会删除远程目录中的所有内容!

如果原目录中有符号链接,--links 选项(或 -l)会在目标目录中重新创建这些符号链接。另一种方法是使用 --copy-links(或 -L)复制符号链接指向的文件或目录,而不是复制符号链接本身。如果有符号链接指向复制的树之外的文件或目录(这是一种安全风险),可以使用 --copy-unsafe-links--safe-links 选项忽略这样的链接,这更安全。

后面四个选项(--times--perms--owner--group-tpog)分别让 rsync 保持原来的更新时间戳、权限、所有者和组信息。同时指定所有这些选项的简便方法是使用 --archive(或 -a),这还会设置 --recursive--links 选项。

后面三个选项(--verbose--progress--stats)提供关于 rsync 正在执行的操作的大量信息。如果对这些信息不感兴趣,只需跳过它们,除非出现错误,rsync 会悄悄地运行。

尽管当前的 rsync 版本默认使用 ssh,但是可以使用 --rsh(或 -e)选项强制使用 ssh。如果需要使用额外的 ssh 参数(例如希望让 ssh 使用非标准端口),可以添加这些参数,例如 --rsh "ssh -p 12345"

可以使用 --exclude 选项(和对应的 --include)选择要同步的文件。在这个示例中,排除了常见的备份文件。应该根据需要排除和包含文件,从而优化发送的内容。

最后,指定源路径和目标路径。不要忘记最后的 /*,否则结果可能不符合期望。可以通过查看文档了解 some/path、some/path/some/path/* 之间的差异。但是,使用 /* 是最保险的方法。

可以使用 -a 选项 (--archive) 简化清单 1 中的命令,见 清单 2。(如果作为根在服务器上运行 rsync-a 选项可能会复制一些额外的内容 — 请查阅文档 — 这不是一种安全的做法)。rsync 还有许多选项;可以通过 rsync --helpman rsync 了解所有选项。

清单 2. 相同命令的简短版本

 


作为守护进程运行 rsync

有两种运行 rsync 的方法:作为守护进程运行和根据需要运行。如果只想同步两台计算机,那么选用哪种方法并没有明显的差异。作为守护进程运行 rsync(使用 rsync --daemon 命令)适用于服务器,允许多个不同的用户针对服务器同步自己的计算机。可以通过 man rsyncd.conf 了解可以指定的选项。但是要注意,对于同步笔记本和桌面计算机,不需要使用复杂的配置。

 

在不需要密码的情况下使用 rsync

如果像上面这样使用 rsync,那么每次都必须输入远程计算机的密码。对于一般的使用,这只是有点儿麻烦;但是,如果要从 cron 过程使用 rsync,这会造成严重的阻碍。

为了实现不需要密码的 rsync 会话,必须设置一个公共-私有密钥对。首先,在笔记本上运行 ssh-keygen -t rsa。在询问密码时,保持为空。这个命令在主目录中的(隐藏的).ssh 目录中创建两个文件:id_rsa 和 id_rsa.pub。

然后,登录服务器,在主目录中运行 mkdir .ssh; chmod 0700 .ssh。返回到笔记本上,把刚创建的 id_rsa.pub 作为 authorized_keys2 复制到新的 .ssh 目录中。在笔记本上,可以运行 scp .ssh/id_rsa.pub your_server:.ssh/authorized_keys2

这就完成了!在此之后,就可以通过 ssh 连接服务器(并运行 scprsync),而不需要输入密码。

 

转自:http://www.ibm.com/developerworks/cn/aix/library/au-rsyncfamily/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值