rsync 就是远程同步的意思remote sync.
rsync 被用在UNIX / Linux执行备份操作操作.
rsync 工具包被用来从一个位置到另一个位置高效地同步文件和文件夹. rsync可以实现在同一台机器的不同文件直接备份,也可以跨服务器备份.
rsync 语法如下
从语法结构我们可以看出, 源和目标即可以在本地也可以在远端. 如果是远端的话,需要指明登录用户名, 远端服务器名, 和远端文件或目录. 同时源可以是多个, 目标位置只能是一个.
说明:
-z: --compress 使用压缩机制
-v: --verbose 打印详细信息
-r: --recursive 以递归模式同步子目录
注意: 同步完成后, 我们会发现文件的时间戳timestamps发生了改变.
有时我们希望拷贝或同步时, 时间戳不要发生变化, 源文件是什么时间戳,目标文件就是什么猜悉敏时间戳, 这时我们需要使用 -a --archive 归档模式选项. -a 选项相当于7个选项的组合 -rlptgoD
-r, --recursive: 递归模式Recursive mode
-l, --links: 将符号链接当作符号链接文件拷贝, 不拷贝符合链接指向的文件内容.
-p, --perms: 保留文件权限
-t, --times: 保留陆高修改时间戳
-g, --group: 保留用户组信息
-o, --owner: 保留用户信息(需要超级用户权限)
-D, 相当于 --devices --specials 的组合, 保留设备文件, 保留特殊文件.
同步完成后, 我们再来看文件属性, 时间戳信息得到了保留, 不仅如此文件的所有者 和所在组也得到保穗枝留.
说明: Pubkeys 是一个普通文件
使用rsync, 也可以从本地拷贝多个文件或目录到远端, 以下即为示例:
注意:
与本地文件拷贝不同的地方在于, 当拷贝文件到远程服务器时, 我们指定远程主机上的用户名, 服务器地址, 路径等信息, 类是于使用scp命令拷贝, 如果没有设置ssh免密码登录我们还需要提供远程用户的密码等信息.有时你不想频繁输入密码, 或者rsync运行在一个无人执守的脚本里面, 这是需要预先设置ssh免密登录, 或者使用结合expect命令,自动输入密码, 但是出于安全考虑, 密码需要加密. 所以在条件许可的情况下, 还是推荐设置ssh免密登录.
与示例 4 稍有不同, 这时远端目录或文件作为源位置, 本地目录或文件作为目标位置, 示例如下:
rsync 允许指定远程主机上运行shell命令.
这时需要使用 -e 选项:
-e, --rsh=COMMAND 指定远端使用的shell命令
Use rsync -e ssh to specify which remote shell to use. In this case, rsync will use ssh.
在一下特殊的使用场景中, 我们不希望拷贝文件时, 我们不希望拷贝过程覆盖掉目标位置中用户做出的修改. 这时我们需要使用 -u 选项明确的告诉rsync命令保留用户在目标文件中作出的修改. 在下面的例子中, 文件Basenames是用户基于上次的拷贝, 修改过的文件, 当我们使用了-u 选项后, 该文件中的修改将不会被覆盖掉.
在某些特殊场景中, 我们只需要远程服务器上的目录结构, 而不希望花大量时间, 带宽拷贝文件内容, 这时我们可以使用 -d, --dirs选项来达到目的.
有时我们希望拷贝文件时, 能实时的显示拷贝进度, 以及传输速率等信息. 尤其是拷贝大文件时, 程序不输出信息, 用户往往无法区分程序是在响应中, 还是已经挂起, 在这种情况下如果使用 –progress 就会非常有帮助.
rsync –progress option displays detailed progress of rsync execution as shown below.
你也可以使用rsnapshot工具 (rsnapshot会调用rsync)来备份本地linux服务器, 或者备份远程linux服务器.
有时我们希望目标文件和源文件保持严格一致, 不要多文件也不要少文件, 这是我们可能需要使用 -delete 选项来达到目的. 如果使用 -delete 选项, rsync将删除目标位置多余的文件或文件夹. 此选项还可以结合--delete-excluded 选项一起使用, 添加一些例外的文件.
上述示例中, new-file.txt 是源文件中没有的文件, 其将会在拷贝时被删除掉.
在某些特殊的场景下, 我们只想更新, 目标位置已经存在的文件或目录, 而不关心源位置的新文件, 这时我们可以使用-existing 选项仅仅更新已经存在的文件.
让我们来验证一下这个选项的功能, 首先在源端添加一个新文件 new-file.txt.
从上面的例子可以看到, 由于加了--existing选项新文件new-file.txt没有被拷贝到目标位置
选项-i, --itemize-changes 非常有用, 当我们想了解目标位置和源位置的文件差异时.
在源端:
在目标端:
注意: 在上面的例子中, 源位置和目标位置有两处差异. 第一, 源文件Basenames的所有者和组 与 目标文件不同, 第一Dirnames文件大小也不一样.
现在让我们来看看rsync会怎样显示这些差异
输出信息只在相应文件前面显示了9个字母来标识改变, 这些字母具体是什么意思呢? 请参考以下详细说明
rsync 可以使用--include 和 --exclude 选项结合通配符进行文件或文件夹过滤
在上面的示例中, 仅仅以P打头的文件和文件夹被包含了进来, 其他的文件都被过滤在拷贝的过程中被排除在外了.
可以使用--max-size 告诉rsync 不要拷贝大小超过某个值的文件, 可以使用K, M, G指定文件大小, M for megabytes and G for gigabytes.
rsync 有个重要优点就是, 可以做到在拷贝的过程中, 只拷贝发生变化了的部分, 而不是发送整个文件.
但是在某些场景中, 比如文件较少, 文件size较小时, 我们的带宽又足够大, cpu资源相对又贫乏, 我们不希望它这样做, 因为毕竟计算源端和目标端的checksum, 并做对比, 也需要额外cpu开销. 这时我们可以使用 -W, --whole-file 选项, 让rsync不用计算那么多, 一上来就直接开始传送文件. 我们可以像下面这么做.
15个Rsync命令实例
B. 如何利用rsync命令传送给另外的服务器
rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。 rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一进行分析说明。 语法 rsync [OPTION]... SRC DEST rsync [OPTION]... SRC [USER@]host:DEST rsync [OPTION]... [USER@]HOST:SRC DEST rsync [OPTION]... [USER@]HOST::SRC DEST rsync [OPTION]... SRC [USER@]HOST::DEST rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST] 对应于以上六种命令格式,rsync有六种不同的工作模式: 拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。如:rsync -a /data /backup 使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。如:rsync -avz *.c foo:src 使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。如:rsync -avz foo:src/bar /data 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。如:rsync -av [email protected]::www /databack 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:rsync -av /databack [email protected]::www 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://192.168.78.192/www
C. Linux下rsync命令用法
1、首先要设置一台rsync服务器比如A服务器,否则2个都是客户机无法传递,还不如scp
2、B服务器的test目录权限一定要开放,最好是777
3、rsync有6种状态,可以从A到B,也可以从B到A,升值可以从A到B,C,D等等
4、rsync的语句结构是:rsync
[OPTION]...
SRC
[SRC]...
rsync://[USER@]HOST[:PORT]/DEST
你可以man或rsync
--help看一下关于option,给你个使用rsync语句2台服务器同步的实例:rsync
-vazu
--progress
--password-file=/etc/rsyncd.secrets
[email protected]::Samba
/home/Samba/
解释:-vazu
v代表详细输出
a代表归档
z代表压缩传递
u代表只更新改动的地方
--progress显示传输过程
--password表示可以选择后面的密码文件去自动匹配密码
还可以加上
--delete选项,将服务器没有的内容删除等等,选项很多,用法灵活,再配合crontab可以实现自动同步备份。
D. rsync命令技巧
rsync 的常用参数如下:
--partial 当有部分文件传输完成,再次传输的时候,会保留已经完成的部分;
--progress 打印文件传输的进度
-P 该参数与 --partial --progress 相同, 表尘激锋示打印文件传输进派晌度,而对于重传发生的时候,会自动保留已经成功传输的部分
-v 表示 同步的时候,显示详细信息
-a 等同于 -rlptgoD , 但是没有 -A (保留acl ), -H (保留硬链接), -X (保留 extended attributes),因为acl,extended attributes 需要目标文件系统支持才可能实现保留
-r : 递归到目录中
-l : 保留软链接
-p : 保留文件的权限
-t : 保留文件的修改时间
-g : 保留所属组
-o : 保留 所属者
-D : 与 --devices --specials 相同,表示保留 设备文件以及特殊文件;
所以常用的参数为: rsync -avP
我们知道,rsync 默认采用873 端口来进行通信,当有client连接进来的时候,会创建一个新的socket, 从而建立连接;这样可能面临被攻击的风险,比如黑客成功和rsync建立了新的socket连接(873端口).
所以,我们可能面临这样的需求: 在server端"不创建新的socket连接",但是依然要实现数据的传输; rsync是支持这种特性的;
没有 socket 连接不能实现网络通信,而又不能创建新的socket连接,那么要实现网络通信就只能使用 :已经处于listen状态的socket来进行通信;rsync的 -e 参数就是用来支持这个特定的:
当指定 -e 参数后,比如 rsync -e "ssh -l ssh_id -p PORT " rsync_user@REMOTE:/PATH/TO/COPY ./ , 这个命令的执行过程如下:
因为-e 指定了远程shell, 所以 rsync 会利用ssh 方式连接到目标服务器,ssh的用户是 ssh_id , 端口是 PORT, 成功连接后,会spawn 一个单用户的rsync 进程,从而保证了当前的rsync传输数据的安全性,因铅锋为没有其他用户可以访问这个进程 . 如果不指定ssh的用户,那么默认的 rsync_user 用户被用作ssh的用户;