rsync的 ( 远程同步 )为在Linux / Unix系统局部 拷贝和同步文件和目录远程以及一个最常用的命令。 随着rsync命令的帮助,您可以复制并在目录中远程和本地同步数据,在磁盘和网络,进行数据备份和两台Linux机器之间的镜像。
本文介绍rsync命令的10个基本和高级的用法在基于Linux的机器远程和本地传输文件。 你并不需要以root用户运行rsync命令。
Rsync命令的一些优点和功能
- 它有效地将文件复制到远程系统或从远程系统同步。
- 支持复制链接,设备,所有者,组和权限。
- 这是比快SCP( 安全复制 ),因为rsync使用远程更新协议,允许转让只是两套文件之间的差异。 第一次,它从源到目标复制文件或目录的整个内容,但从下一次,它只将已更改的块和字节复制到目标。
- rsync的消耗更少的带宽 ,因为它使用压缩和解压缩方法在发送和接收数据两端。
rsync命令的基本语法
rsync options source destination
与rsync命令一起使用的一些常见选项
- -v:详细
- -r:将数据递归(但不保存时间戳和权限,同时传输数据
- -a:归档模式下,归档模式允许递归地拷贝文件,同时也保留了符号链接,文件权限,用户组所有权和时间戳
- -z:压缩文件中的数据
- -h:在人类可读的格式人类可读,输出数字
推荐阅读: 如何同步文件/目录使用rsync非标准SSH端口
在Linux机器上安装rsync
我们可以用下面的命令的帮助安装的rsync包。
# yum install rsync (On Red Hat based systems) # apt-get install rsync (On Debian based systems)
本地复制/同步文件和目录
在本地计算机上复制/同步文件
以下命令将同步本地计算机上的单个文件从一个位置到另一个位置。 在这里,在这个例子中,backup.tar需要的文件名被复制或同步到/ tmp /备份/文件夹。
[root@howtoing]# rsync -zvh backup.tar /tmp/backups/ created directory /tmp/backups backup.tar sent 14.71M bytes received 31 bytes 3.27M bytes/sec total size is 16.18M speedup is 1.10
在上面的示例中,您可以看到,如果目标不存在,rsync将自动为目标创建一个目录。
在本地计算机上复制/同步目录
以下命令将将同一目录中的所有文件传输或同步到同一计算机中的不同目录。 在这里,在这个例子中,/根/ rpmpkgs包含一些rpm软件包的文件和你想要的目录里面被复制的/ tmp /备份/文件夹。
[root@howtoing]# rsync -avzh /root/rpmpkgs /tmp/backups/ sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.2.3-82.el5.centos.i386.rpm rpmpkgs/mod_ssl-2.2.3-82.el5.centos.i386.rpm rpmpkgs/nagios-3.5.0.tar.gz rpmpkgs/nagios-plugins-1.4.16.tar.gz sent 4.99M bytes received 92 bytes 3.33M bytes/sec total size is 4.99M speedup is 1.00
将文件和目录复制/同步到服务器或从服务器同步
将目录从本地服务器复制到远程服务器
此命令将来自本地计算机的目录同步到远程机器,例如 :有一个在其中包含了一些RPM包本地计算机“rpmpkgs”的文件夹,你想那个地方目录的内容发送到远程服务器,您可以使用以下命令。
[root@howtoing]$ rsync -avz rpmpkgs/ root@192.168.0.101:/home/ root@192.168.0.101's password: sending incremental file list ./ httpd-2.2.3-82.el5.centos.i386.rpm mod_ssl-2.2.3-82.el5.centos.i386.rpm nagios-3.5.0.tar.gz nagios-plugins-1.4.16.tar.gz sent 4993369 bytes received 91 bytes 399476.80 bytes/sec total size is 4991313 speedup is 1.00
将远程目录复制/同步到本地计算机
此命令将帮助您将远程目录同步到本地目录。 在这里,在这个例子中,目录/ home / tarunika / rpmpkgs这是一个远程服务器上正在于在/ tmp / myrpms本地计算机复制。
[root@howtoing]# rsync -avzh root@192.168.0.100:/home/tarunika/rpmpkgs /tmp/myrpms root@192.168.0.100's password: receiving incremental file list created directory /tmp/myrpms rpmpkgs/ rpmpkgs/httpd-2.2.3-82.el5.centos.i386.rpm rpmpkgs/mod_ssl-2.2.3-82.el5.centos.i386.rpm rpmpkgs/nagios-3.5.0.tar.gz rpmpkgs/nagios-plugins-1.4.16.tar.gz sent 91 bytes received 4.99M bytes 322.16K bytes/sec total size is 4.99M speedup is 1.00
通过SSH的Rsync
随着rsync的,我们可以使用SSH( 安全外壳 )进行数据传输,使用SSH协议在传输我们的数据,你可以确保你的数据在加密的安全连接传送,这样当它被转移没有人可以读取数据在互联网上的电线。
此外,当我们使用rsync,我们需要提供用户名/ root密码来完成特定的任务,因此在使用SSH选项将把您的登录信息以加密的方式,使你的密码是安全的。
通过SSH将文件从远程服务器复制到本地服务器
要指定使用rsync的协议,你需要给你想使用的协议名称为“-e”选项。 在这里,在这个例子中,我们将使用“SSH”与“-e”选项,并执行数据传送。
[root@howtoing]# rsync -avzhe ssh root@192.168.0.100:/root/install.log /tmp/ root@192.168.0.100's password: receiving incremental file list install.log sent 30 bytes received 8.12K bytes 1.48K bytes/sec total size is 30.74K speedup is 3.77
使用SSH将文件从本地服务器复制到远程服务器
[root@howtoing]# rsync -avzhe ssh backup.tar root@192.168.0.100:/backups/ root@192.168.0.100's password: sending incremental file list backup.tar sent 14.71M bytes received 31 bytes 1.28M bytes/sec total size is 16.18M speedup is 1.10
建议阅读: 使用rsync来同步新增功能或变更/修改的文件在Linux中
使用rsync传输数据时显示进度
为了显示进度,同时从一台计算机传送数据到不同的机器,我们可以用它'-progress“选项。 它显示完成传输的文件和剩余时间。
[root@howtoing]# rsync -avzhe ssh --progress /home/rpmpkgs root@192.168.0.100:/root/rpmpkgs root@192.168.0.100's password: sending incremental file list created directory /root/rpmpkgs rpmpkgs/ rpmpkgs/httpd-2.2.3-82.el5.centos.i386.rpm 1.02M 100% 2.72MB/s 0:00:00 (xfer#1, to-check=3/5) rpmpkgs/mod_ssl-2.2.3-82.el5.centos.i386.rpm 99.04K 100% 241.19kB/s 0:00:00 (xfer#2, to-check=2/5) rpmpkgs/nagios-3.5.0.tar.gz 1.79M 100% 1.56MB/s 0:00:01 (xfer#3, to-check=1/5) rpmpkgs/nagios-plugins-1.4.16.tar.gz 2.09M 100% 1.47MB/s 0:00:01 (xfer#4, to-check=0/5) sent 4.99M bytes received 92 bytes 475.56K bytes/sec total size is 4.99M speedup is 1.00
使用-include和-exclude选项
这两个选项可以让我们包括通过与这些选项可以帮助我们来指定要在同步纳入和排除文件和文件夹,你不想被转移这些文件或目录指定参数排除文件。
在这里,在这个例子中,rsync命令将包括那些只有那些带“R”开始的文件和目录,并排除所有其它文件和目录。
[root@howtoing]# rsync -avze ssh --include 'R*' --exclude '*' root@192.168.0.101:/var/lib/rpm/ /root/rpm root@192.168.0.101's password: receiving incremental file list created directory /root/rpm ./ Requirename Requireversion sent 67 bytes received 167289 bytes 7438.04 bytes/sec total size is 434176 speedup is 2.59
使用-delete选项
如果文件或目录在源处不存在,但在目标位置已存在,那么在同步时可能需要删除目标处的现有文件/目录。
我们可以用'-delete'选项删除不存在源目录中的文件。
源和目标已同步。 现在,在创建新的目标文件test.txt。
[root@howtoing]# touch test.txt [root@howtoing]# rsync -avz --delete root@192.168.0.100:/var/lib/rpm/ . Password: receiving file list ... done deleting test.txt ./ sent 26 bytes received 390 bytes 48.94 bytes/sec total size is 45305958 speedup is 108908.55
目标有叫test.txt的 ,当用'-delete'选项的源同步新的文件,它去掉了文件test.txt。
设置要传输的文件的最大大小
您可以指定要传输的最大文件大小或同步。 你可以用“-MAX大小 ”选项做到这一点。 在这里,在这个例子中,最大文件的大小是200K,因此该命令将只传送那些等于或大于200k的较小的文件。
[root@howtoing]# rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ root@192.168.0.100:/root/tmprpm root@192.168.0.100's password: sending incremental file list created directory /root/tmprpm ./ Conflictname Group Installtid Name Provideversion Pubkeys Requireversion Sha1header Sigmd5 Triggername __db.001 sent 189.79K bytes received 224 bytes 13.10K bytes/sec total size is 38.08M speedup is 200.43
成功传输后自动删除源文件
现在,假设您有一个主Web服务器和数据备份服务器,您创建了每日备份并与备份服务器同步,现在您不想在Web服务器中保留备份的本地副本。
所以,你会等待传输完成,然后手动删除这些本地备份文件? 当然不。 这种自动删除可以用'-remove-源文件 “选项来完成。
[root@howtoing]# rsync --remove-source-files -zvh backup.tar /tmp/backups/ backup.tar sent 14.71M bytes received 31 bytes 4.20M bytes/sec total size is 16.18M speedup is 1.10 [root@howtoing]# ll backup.tar ls: backup.tar: No such file or directory 9.使用rsync进行干运行
如果你是一个新手,并使用rsync,不知道你的命令去做什么。 Rsync可能真的搞砸了你的目标文件夹中的东西,然后做一个撤消可以是一个乏味的工作。
推荐阅读: 如何同步两个Apache的Web服务器/网站使用rsync
此选项将不会做任何改变只做命令的预演和使用显示命令的输出,如果输出显示完全相同你想做的事,那么你可以从你的命令删除“-dry运行 ”选项,在终端上运行。
root@howtoing]# rsync --dry-run --remove-source-files -zvh backup.tar /tmp/backups/ backup.tar sent 35 bytes received 15 bytes 100.00 bytes/sec total size is 16.18M speedup is 323584.00 (DRY RUN)
设置带宽限制和传输文件
您可以同时从一台机器与'-bwlimit'选项的帮助下将数据传输到另一台机器上设置的带宽限制。 此选项可以帮助我们限制I / O带宽。
[root@howtoing]# rsync --bwlimit=100 -avzhe ssh /var/lib/rpm/ root@192.168.0.100:/root/tmprpm/ root@192.168.0.100's password: sending incremental file list sent 324 bytes received 12 bytes 61.09 bytes/sec total size is 38.08M speedup is 113347.05
此外,默认情况rsync的同步不仅改变块和字节,如果你想明确地要同步整个文件,然后使用“-W'与它选项。
[root@howtoing]# rsync -zvhW backup.tar /tmp/backups/backup.tar backup.tar sent 14.71M bytes received 31 bytes 3.27M bytes/sec total size is 16.18M speedup is 1.10