天天看点

rsync命令使用总结

rsync的重要功能

速度:第一次,rsync复制源目录和目标目录之间的整个内容。下一次,rsync仅将更改的块或字节传输到目标位置,这使传输真正快速。

安全性:rsync允许在传输过程中使用ssh协议对数据进行加密。

较少带宽:rsync分别在发送和接收端使用数据块的压缩和解压缩。因此,rsync使用的带宽与其他文件传输协议相比总是较少。

特权:安装和执行rsync不需要特殊的权限

使用格式:

<code>$ </code><code>rsync</code> <code>options </code><code>source</code> <code>destination</code>

Source 、destination可以是本地或远程。在远程的情况下,指定登录名,远程服务器名称和位置。

1.同步本地服务器中的两个目录

要同步本地计算机中的两个目录,请使用以下rsync -zvr命令

<code># rsync -zvr /tmp/ /data/</code>

<code>sending incremental </code><code>file</code> <code>list</code>

<code>ks-script-hd1UxV</code>

<code>yum.log</code>

<code>.ICE-unix/</code>

<code>.Test-unix/</code>

<code>.X11-unix/</code>

<code>.XIM-unix/</code>

<code>.font-unix/</code>

<code>111/</code>

<code>sent 642 bytes  received 74 bytes  1432.00 bytes</code><code>/sec</code>

<code>total size is 836  speedup is 1.17</code>

在上面的rsync示例中:

-z是启用压缩

-v详细

-r表示递归

现在让我们看一下从源到目的地复制的文件之一的时间戳。如下所示,rsync在同步期间没有保留时间戳

<code># ll /tmp/yum.log /data/yum.log </code>

<code>-rw-------. 1 root root 0 Aug 25 22:16 </code><code>/data/yum</code><code>.log</code>

<code>-rw-------. 1 root root 0 Aug 20 20:39 </code><code>/tmp/yum</code><code>.log</code>

rsync选项-a表示归档模式。-a选项执行以下操作,

递归模式

保存符号链接

保留权限

保留时间戳

保存所有者和组

现在,执行示例1中提供的相同命令(但是使用rsync选项-a),如下所示:

<code># rsync -azv /tmp/ /data/        </code>

<code>./</code>

如下所示,rsync在同步期间保留时间戳

<code>-rw-------. 1 root root 0 Aug 20 20:39 </code><code>/data/yum</code><code>.log</code>

要仅复制一个文件,请指定rsync命令的文件名,如下所示。

<code># rsync -v /tmp/yum.log /data/</code>

<code>sent 67 bytes  received 31 bytes  196.00 bytes</code><code>/sec</code>

<code>total size is 0  speedup is 0.00</code>

rsync允许您同步本地和远程系统之间的文件/目录。

<code># rsync -avz /data/1.txt [email protected]:/data/</code>

<code>The authenticity of host </code><code>'192.168.0.172 (192.168.0.172)'</code> <code>can't be established.</code>

<code>ECDSA key fingerprint is 96:4f:34:ce:2f:c6:15:ae:24:06:02:7f:e1:a8:7f:66.</code>

<code>Are you sure you want to </code><code>continue</code> <code>connecting (</code><code>yes</code><code>/no</code><code>)? </code><code>yes</code>

<code>Warning: Permanently added </code><code>'192.168.0.172'</code> <code>(ECDSA) to the list of known hosts.</code>

<code>1.txt</code>

<code>sent 75 bytes  received 31 bytes  11.16 bytes</code><code>/sec</code>

<code>total size is 6  speedup is 0.06</code>

在与远程服务器进行同步时,需要指定远程服务器的用户名和IP地址。您还应该在远程服务器上指定目标目录。格式为username @ machinename:path

如上所述,它在从本地到远程服务器执行rsync时要求输入密码。

有时您不想在从本地服务器远程服务器备份文件时输入密码。例如,如果您有一个备份shell脚本,可以使用rsync将文件从本地文件复制到远程服务器,那么您无需输入密码即可使用rsync。

要做到这一点,请先安装ssh密码登录,

当要将文件从远程同步到本地时,请在目标的源和本地路径中指定远程路径,如下所示。

<code># rsync -avz 192.168.0.176:/data/yum.log /data/ </code>

<code>receiving incremental </code><code>file</code> <code>list</code>

<code>sent 30 bytes  received 73 bytes  18.73 bytes</code><code>/sec</code>

rsync允许您指定要使用的远程shell。您可以使用rsync ssh启用安全的远程连接。使用rsync -e ssh指定要使用哪个远程shell。在这种情况下,rsync将使用ssh

<code># rsync -avz -e ssh 192.168.0.176:/data/ /data/tmp/        </code>

<code>sent 53 bytes  received 204 bytes  514.00 bytes</code><code>/sec</code>

在典型的同步情况下,如果文件在目的地被修改,我们可能不想用来源的旧文件覆盖该文件。

使用rsync -u选项来做到这一点。(即不要覆盖目的地的文件,如果被修改)。在以下示例中,名为Basenames的文件已在目标位置修改。所以,它不会被rsync -u覆盖。

<code># cat /data/tmp/yum.log </code>

<code>111111</code>

<code># rsync -avzu 192.168.0.176:/data/ /data/tmp/       </code>

<code>sent 16 bytes  received 150 bytes  110.67 bytes</code><code>/sec</code>

<code># rsync -avzu 192.168.0.176:/data/ /data/tmp/</code>

<code>2.txt</code>

<code>sent 38 bytes  received 216 bytes  46.18 bytes</code><code>/sec</code>

<code>total size is 7  speedup is 0.03</code>

使用rsync -d选项只能从源到目的地同步目录树。以下示例,以递归方式同步目录树,而不是目录中的文件。

<code># tree /data/</code>

<code>/data/</code>

<code>├── 1dir</code>

<code>│   ├── 4dir</code>

<code>│   │   └── 5.txt</code>

<code>│   └── 5dir</code>

<code>├── 2dir</code>

<code>├── 2.txt</code>

<code>├── 3dir</code>

<code>└── yum.log</code>

<code># rsync -vd 192.168.0.176:/data/ /data/tmp/    </code>

<code>receiving </code><code>file</code> <code>list ... </code><code>done</code>

<code>1dir/</code>

<code>2dir/</code>

<code>3dir/</code>

<code>sent 45 bytes  received 231 bytes  552.00 bytes</code><code>/sec</code>

<code># tree /data/tmp/</code>

<code>/data/tmp/</code>

<code>3 directories, 2 files</code>

当您使用rsync进行备份时,您可能需要知道备份的进度。即有多少个文件是副本,以什么速度复制文件等。

rsync -progress选项显示rsync执行的详细进度,如下所示。

<code># rsync -avz --progress 192.168.0.176:/data/ /data/tmp/</code>

<code>           </code><code>0 100%    0.00kB</code><code>/s</code>    <code>0:00:00 (xfer</code><code>#1, to-check=15/18)</code>

<code>1dir</code><code>/4dir/</code>

<code>1dir</code><code>/4dir/5</code><code>.txt</code>

<code>           </code><code>6 100%    5.86kB</code><code>/s</code>    <code>0:00:00 (xfer</code><code>#2, to-check=4/18)</code>

<code>1dir</code><code>/5dir/</code>

<code>2dir</code><code>/4dir/</code>

<code>2dir</code><code>/5dir/</code>

<code>3dir</code><code>/4dir/</code>

<code>3dir</code><code>/5dir/</code>

<code>sent 93 bytes  received 470 bytes  375.33 bytes</code><code>/sec</code>

<code>total size is 13  speedup is 0.02</code>

您还可以使用rsnapshot实用程序(使用rsync)来备份本地linux服务器或备份远程linux服务器。

如果文件不存在于源,但存在于目标中,则可能需要在rsync期间删除目标文件。

在这种情况下,请使用-delete选项,如下所示。rsync delete选项删除源目录中不存在的文件。

目标有新的文件名为1.txt,当与-delete选项同步时,它删除了文件1.txt

如果你愿意,你可以更新(同步)目标的现有文件。如果源有新的文件,目标不存在,您可以避免在目标上创建这些新文件。如果需要此功能,请使用-existing选项与rsync命令。

首先,把目前的之前同步的3.txt删除,目的地就没有了3.txt

<code># rm -rf /data/tmp/3.txt</code>

<code>[root@kvm-host ~]</code><code># rsync -avz --existing 192.168.0.176:/data/ /data/tmp/</code>

<code>sent 28 bytes  received 405 bytes  66.62 bytes</code><code>/sec</code>

<code>total size is 53  speedup is 0.12</code>

source:

<code># ll /data/</code>

<code>total 12</code>

<code>drwxr-xr-x. 4 root root 30 Aug 25 23:09 1dir</code>

<code>drwxr-xr-x. 4 root root 30 Aug 25 23:09 2dir</code>

<code>-rw-r--r--. 1 root root  7 Aug 25 23:06 2.txt</code>

<code>drwxr-xr-x. 4 root root 30 Aug 25 23:09 3dir</code>

<code>-rw-r--r--. 1 root root 20 Aug 25 23:22 3.txt</code>

<code>-rw-r--r--. 1 root root 20 Aug 25 23:21 new-</code><code>file</code><code>.txt</code>

<code>-rw-------. 1 root root  0 Aug 25 22:21 yum.log</code>

dst:

<code># ll /data/tmp/</code>

<code>total 16</code>

<code>drwxr-xr-x 4 root root 4096 Aug 25 23:09 1dir</code>

<code>drwxr-xr-x 4 root root 4096 Aug 25 23:09 2dir</code>

<code>-rw-r--r-- 1 root root    7 Aug 25 23:06 2.txt</code>

<code>drwxr-xr-x 4 root root 4096 Aug 25 23:09 3dir</code>

<code>-rw------- 1 root root    0 Aug 25 22:21 yum.log</code>

现在让我们看看rsync如何显示这个差异。-i选项显示项目更改。

<code> </code><code>rsync</code> <code>-avzi 192.168.0.176:</code><code>/data/</code> <code>/data/tmp/</code>           

<code>&gt;f+++++++++ 3.txt</code>

<code>&gt;f+++++++++ new-</code><code>file</code><code>.txt</code>

<code>sent 63 bytes  received 520 bytes  1166.00 bytes</code><code>/sec</code>

<code>total size is 53  speedup is 0.09</code>

在输出中,它显示文件名或目录名前面的9个字母,表示更改。

在我们的例子中,前面的字母表示如下:

<code>&gt;指定文件正在传输到本地主机。</code>

<code>f表示它是一个文件。</code>

<code>s表示大小变化。t表示时间戳更改。</code>

<code>o所有者改变</code>

<code>g组改变了。</code>

rsync允许您在进行同步时给出要包含的模式并排除文件或目录。

<code># mkdir /data/{s1dir,s2dri}</code>

<code># mkdir /data/r1dir</code>

<code># touch /data/r1dir/u.txt</code>

<code># rsync -avz --include 's*' --exclude '*' 192.168.0.176:/data/ /data/tmp/ </code>

<code>s1dir/</code>

<code>s2dri/</code>

<code>sent 37 bytes  received 80 bytes  234.00 bytes</code><code>/sec</code>

在上面的例子中,它只包含以's'(使用rsync include)开头的文件或目录,并排除所有其他文件。(使用rsync 排除'*')

您可以告诉rsync不要使用rsync -max-size选项传输大于特定大小的文件。

<code># ll -h /data/test.txt /data/t.txt</code>

<code>-rw-r--r--. 1 root root  78K Aug 25 23:51 </code><code>/data/test</code><code>.txt</code>

<code>-rw-r--r--. 1 root root 2.0K Aug 25 23:52 </code><code>/data/t</code><code>.txt</code>

<code># rsync -avz --max-size="50K" 192.168.0.176:/data/ /data/tmp/</code>

<code>t.txt</code>

<code>r1dir/</code>

<code>r1dir</code><code>/u</code><code>.txt</code>

<code>sent 72 bytes  received 1300 bytes  249.45 bytes</code><code>/sec</code>

<code>total size is 81341  speedup is 59.29</code>

max-size = 50K使rsync仅传输小于或等于50K的文件。您可以将M表示为兆字节,G表示千兆字节。

rsync的一个主要特点是它只将更改的块传输到目的地,而不是发送整个文件。

如果不考虑网络带宽(但CPU除外),则可以使用rsync -W选项传输整个文件。这将加速rsync进程,因为它不必在源和目的地执行校验和

<code># rsync -avzW 192.168.0.176:/data/ /data/tmp/</code>

<code>test</code><code>.txt</code>

<code>sent 47 bytes  received 13085 bytes  2387.64 bytes</code><code>/sec</code>

<code>total size is 81341  speedup is 6.19</code>

16、通过ssh无密码rsync

首先需要生成没有加密的public key,把你的ssh public key放到远程主机

<code># ssh-keygen</code>

<code>Enter passphrase (empty </code><code>for</code> <code>no passphrase):</code>

<code>Enter same passphrase again:</code>

<code>ssh</code><code>-copy-</code><code>id</code> <code>-i ~/.</code><code>ssh</code><code>/id_rsa</code><code>.pub 192.168.0.176</code>

<code># rsync -avz -e ssh /data/tmp/ 192.168.0.176:/data/</code>

<code></code>

本文转自 喵来个鱼 51CTO博客,原文链接:http://blog.51cto.com/m51cto/1959478,如需转载请自行联系原作者