Rsync (Remote Sync)是非常常用的一个命令,主要是用于远程同步和复制文件和目录,以及在Linux / Unix系统中本地复制和同步。
借助rsync命令,您可以跨目录,跨磁盘和网络远程和本地复制和同步数据,在两台Linux计算机之间执行数据备份和镜像。
在这里,我们将介绍10个rsync的基本和高级用法,用于在基于Linux的计算机上远程和本地传输文件,rsync命令是不需要通过root用户来运行的。
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)
1.本地复制/同步文件和目录
复制/同步本地计算机上的文件
以下命令将本地计算机上的单个文件从一个位置同步到另一个位置。 在此示例中,需要将文件名backup.tar复制或同步到/tmp/backups/ folder.
[root@hostingwiki]# 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将自动为目标创建目录。
复制/同步本地计算机上的目录
以下命令将从一个目录的所有文件传输或同步到同一台机器中的不同目录。 在这个示例中,/ root / rpmpkgs包含一些rpm包文件,您希望将该目录复制到/tmp/backups/文件夹中。
[root@hostingwiki]# 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
2.将文件和目录复制/同步到服务器或从服务器复制
将目录从本地服务器复制到远程服务器
此命令将同步目录从本地计算机到远程计算机。 例如:本地计算机中有一个文件夹“rpmpkgs”,其中包含一些RPM软件包,并且您希望将本地目录的内容发送到远程服务器,您可以使用以下命令。
[root@tecmint]$ 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@tecmint]# 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
3. 通过SSH进行Rsync
使用rsync,我们可以使用SSH(Secure Shell)进行数据传输,使用SSH协议传输数据时,可以确保数据通过加密传输到安全连接中,这样任何人都无法在传输数据时读取数据 通过互联网上的电线。
此外,当我们使用rsync时,我们需要提供用户/ root密码来完成该特定任务,因此使用SSH选项将以加密方式发送您的登录信息,以便您的密码安全。
使用SSH将文件从远程服务器复制到本地服务器
要使用rsync指定协议,您需要为“-e”选项提供要使用的协议名称。 在这个例子中,我们将使用带有“-e”选项的“ssh”并执行数据传输。
[root@tecmint]# 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@tecmint]# 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中同步新的或更改/修改的文件
4.使用rsync传输数据时显示进度
为了在将数据从一台机器传输到另一台机器时显示进度,我们可以使用’-progress’选项。 它显示完成传输的文件和剩余时间。
[root@tecmint]# 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
5.使用-include和-exclude选项
这两个选项允许我们通过使用这些选项指定参数来包含和排除文件,这有助于我们指定要包含在同步中的文件或目录,并排除您不想传输的文件和文件夹。
在此示例中,rsync命令将仅包含以“R”开头的那些文件和目录,并排除所有其他文件和目录。
[root@tecmint]# 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
6.使用-delete选项
如果源文件或目录不存在但目标已存在,则可能需要在同步时删除目标上的现有文件/目录。
我们可以使用’-delete’选项删除源目录中不存在的文件。
源和目标是同步的。 现在在目标上创建新文件test.txt。
[root@tecmint]# touch test.txt
[root@tecmint]# 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
Target有一个名为test.txt的新文件,当使用’-delete’选项与源同步时,它删除了文件test.txt。
[root@tecmint]# 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
8.成功传输后自动删除源文件
现在,假设您有一个主Web服务器和一个数据备份服务器,您创建了每日备份并将其与备份服务器同步,现在您不希望在Web服务器中保留该本地备份副本。
那么,您是否会等待传输完成,然后手动删除这些本地备份文件? 当然不。 可以使用’-remove-source-files’选项完成此自动删除。
[root@tecmint]# 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@tecmint]# ll backup.tar
ls: backup.tar: No such file or directory
9.使用rsync执行Dry Run
如果你是一个新手,并使用rsync,不知道你的命令究竟是做什么的。 Rsync可能真的搞乱了目标文件夹中的内容,然后进行撤消可能是一项单调乏味的工作。
建议阅读:如何使用Rsync同步两个Apache Web服务器/网站
使用此选项不会进行任何更改只执行命令的干运行并显示命令的输出,如果输出显示与您想要的完全相同,则可以从命令中删除“-dry-run”选项 在终端上运行。
root@tecmint]# 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)
10.设置带宽限制和传输文件
您可以在’-bwlimit’选项的帮助下,在将数据从一台机器传输到另一台机器时设置带宽限制。 此选项可帮助我们限制I / O带宽。
[root@tecmint]# 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@tecmint]# 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
这是全部使用rsync的使用方法,您可以看到手册页以获取更多选项。 随时关注Johnhao,以便将来提供更多令人兴奋和有趣的教程,同事也请留下您的意见和建议。