Linux学习|Gentoo/Arch/FreeBSDLinuxLinux学习之路

Linux命令学习手册-rsync

2020-02-25  本文已影响0人  QuietHeart
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]

功能

更快更好地远程拷贝文件(可以替代 rcp )。

描述

命令格式

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 有六种不同的工作模式:

  1. 拷贝本地文件。

    SRCDES 路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。如: rsync -a /data /backup

  2. 使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。

    DST 路径地址包含单个冒号 : 分隔符时启动该模式。如: rsync -avz *.c foo:src

  3. 使用一个远程 shell 程序(如 rshssh )来实现将远程机器的内容拷贝到本地机器。

    SRC 地址路径包含单个冒号 : 分隔符时启动该模式。如: rsync -avz foo:src/bar /data

  4. 从远程 rsync 服务器中拷贝文件到本地机。

    SRC 路径信息包含" :: "分隔符时启动该模式。如: rsync -av root@172.16.78.192::www /databack

  5. 从本地机器拷贝文件到远程 rsync 服务器中。

    DST 路径信息包含" :: "分隔符时启动该模式。如: rsync -av /databack root@172.16.78.192::www

  6. 列远程机的文件列表。

    这类似于 rsync 传输,不过只要在命令中省略掉本地机信息即可。如: rsync -v rsync://172.16.78.192/www

由此可知, rsync 可以像 cp 一样从本地拷贝文件备份,可以像 scp 一样远程拷贝,也可以以 rsync 服务的方式拷贝文件(隐藏了本地具体目录名称,增强了安全性),关于 rsync 服务的搭建,后面有专门讲解。注意 rsync 不能实现直接控制远程机器和远程机器之间的拷贝。

参数

rsync 参数的具体解释如下:

一般同步传输目录都使用 azv 选项。

举例

拷贝 10.1.2.213 上面的一个文件到本地机器

$ rsync -v quietheart@10.1.2.213:/home/quietheart/tmpTrans/linux.tar.gz ./

输入之后输出如下:

quietheart@10.1.2.213's password: 
linux.tar.gz 
sent 42 bytes  received 191867441 bytes  8924068.98 bytes/sec 
total size is 191843888  speedup is 1.00

这里,根据提示,输入密码之后就开始传输了。

“假装”拷贝 10.1.2.213 上面的一个文件到本地机器

$ rsync -n quietheart@10.1.2.213:/home/quietheart/tmpTrans/linux.tar.gz ./

输入之后输出如下:

quietheart@10.1.2.213's password:

这里,根据提示,输入密码之后就结束了,并不实际拷贝内容,而是假执行一下。

“假装”拷贝 10.1.2.213 上面的一个文件到本地机器,显示详细信息

$ rsync -nv quietheart@10.1.2.213:/home/quietheart/tmpTrans/linux.tar.gz ./ 
quietheart@10.1.2.213's password: 
linux.tar.gz 
sent 26 bytes  received 97 bytes  49.20 bytes/sec 
total size is 191843888  speedup is 1559706.41

这里,将会看到,实际并没把文件linux.tar.gz拷贝到本地机器上面。

拷贝文件并且显示进度

$ rsync --progress quietheart@10.1.2.213:/home/quietheart/tmpTrans/linux.tar.gz ./

如果当前目录刚刚拷贝了 linux.tar.gz ,那么输入之后,输出如下:

quietheart@10.1.2.213's password: 
linux.tar.gz 
   191843888 100%   45.42MB/s    0:00:04 (xfer#1, to-check=0/1) 
sent 97020 bytes  received 55549 bytes  17949.29 bytes/sec 
total size is 191843888  speedup is 1257.42

如果当前目录没 linux.tar.gz ,那么输入之后输出如下:

quietheart@10.1.2.213's password: 
linux.tar.gz 
   191843888 100%    8.67MB/s    0:00:21 (xfer#1, to-check=0/1) 
sent 42 bytes  received 191867441 bytes  8164573.74 bytes/sec 
total size is 191843888  speedup is 1.00

这里,文件,我们可以看到,如果当前文件是存在的,那么拷贝的速度会大大加快,因为 rsync 只拷贝文件中改动的部分。这个命令在拷贝文件的时候想要了解拷贝的进度的时候挺有用。使用 scp 拷贝也会显示进度。

以递归方式传输目录中的文件(不含最外层目录),显示进度和传输详细信息,并保留所有文件所有属性

$ rsync --progress -av openoffice/ quietheart@10.1.2.213:/home/quietheart/tmpTrans/

输入之后,输出如下:

quietheart@10.1.2.213's password: 
building file list ... 
3 files to consider 
./ 
OOo_3.3.0_Linux_x86-64_install-rpm-wJRE_en-US.tar.gz 
   191843888 100%    9.41MB/s    0:00:19 (xfer#1, to-check=1/3) 
good.conf 
           7 100%    0.01kB/s    0:00:00 (xfer#2, to-check=0/3) 
sent 191867568 bytes  received 70 bytes  8527450.58 bytes/sec 
total size is 191843895  speedup is 1.00

这里,将文件传输到 10.1.2.213 机器上,使用 -a 选项,等价于使用 -rlptgoD 选项, -v 选项显示详细信息, --progress 显示进度,注意传输完毕之后,会发现目标机器上面的 /home/quietheart/tmpTrans 中将会出现 openoffice 中的内容,但是不会有 openoffice 目录。实践发现,如果目标目录的某个文件被改变了,那么这样复制就会用源文件覆盖目标同名的文件,也就是说改变就丢失了。

递归传输目录中的文件(不含最外目录),对备份文件传输时压缩处理,显示进度和传输详细信息,并保留所有文件所有属性

$ rsync --progress -azv openoffice/ quietheart@10.1.2.213:/home/quietheart/tmpTrans/

输入之后,输出如下:

quietheart@10.1.2.213's password: 
building file list ... 
3 files to consider 
./ 
OOo_3.3.0_Linux_x86-64_install-rpm-wJRE_en-US.tar.gz 
   191843888 100%    9.67MB/s    0:00:18 (xfer#1, to-check=1/3) 
good.conf 
           7 100%    0.04kB/s    0:00:00 (xfer#2, to-check=0/3) 
sent 191908555 bytes  received 70 bytes  8529272.22 bytes/sec 
total size is 191843895  speedup is 1.00

这里,使用 -z 选项在传输之前进行了压缩处理,但是由于这里文件都压缩过了所以也没有看到有什么不同。

以递归方式传输目录中的文件(含最外层目录),显示进度和传输详细信息,并保留所有文件所有属性

$ rsync --progress -av openoffice quietheart@10.1.2.213:/home/quietheart/tmpTrans/

输入之后,输出如下:

quietheart@10.1.2.213's password: 
building file list ... 
3 files to consider 
./ 
OOo_3.3.0_Linux_x86-64_install-rpm-wJRE_en-US.tar.gz 
   191843888 100%    9.41MB/s    0:00:19 (xfer#1, to-check=1/3) 
good.conf 
           7 100%    0.01kB/s    0:00:00 (xfer#2, to-check=0/3) 
sent 191867568 bytes  received 70 bytes  8527450.58 bytes/sec 
total size is 191843895  speedup is 1.00

这里,注意如果保留最外层目录,那么就去掉在源目录名后面的'/'目录分割符号,将目录传输到 10.1.2.213 机器上,使用 -a 选项,等价于使用 -rlptgoD 选项, -v 选项显示详细信息, --progress 显示进度,注意传输完毕之后,会发现目标机器上面的 /home/quietheart/tmpTrans 中将会出现 openoffice 目录,里面有相应的内容。

传输目录中包含非压缩文件,不用 -z 选项和使用 -z 选项的差别

一般传输大量数据的时候都使用 -avz ,使用 -z 选项在传输之前会将文件压缩并传输,这样减少传输的数据量,参见后面的对比。

不用 -z 选项

$rsync --progress -av quietheart@10.1.2.213:/home/quietheart/tmpTrans/openoffice ./ 
quietheart@10.1.2.213's password: 
receiving file list ... 
3 files to consider 
openoffice/ 
openoffice/OOo_3.3.0_Linux_x86-64_install-rpm-wJRE_en-US.tar 
   196096000 100%   10.32MB/s    0:00:18 (xfer#1, to-check=1/3) 
openoffice/good.conf 
           7 100%    0.05kB/s    0:00:00 (xfer#2, to-check=0/3) 
sent 70 bytes  received 196120191 bytes  9121872.60 bytes/sec 
total size is 196096007  speedup is 1.00

这里,没使用 -z 压缩选项,传输的数据为: 196120191 ,最后大小: 196096007

使用 -z 选项

$ rsync --progress -azv quietheart@10.1.2.213:/home/quietheart/tmpTrans/openoffice ./ 
quietheart@10.1.2.213's password: 
receiving file list ... 
3 files to consider 
openoffice/ 
openoffice/OOo_3.3.0_Linux_x86-64_install-rpm-wJRE_en-US.tar 
   196096000 100%   10.49MB/s    0:00:17 (xfer#1, to-check=1/3) 
openoffice/good.conf 
           7 100%    0.01kB/s    0:00:00 (xfer#2, to-check=0/3) 
sent 70 bytes  received 191871852 bytes  8924275.44 bytes/sec 
total size is 196096007  speedup is 1.02

这里,使用压缩的 -z 选项,传输的数据为: 191871852 ,最后大小为: 196096007

同步文件的时候,在目标中删除源中没有的文件

$ rsync --delete --progress -azv quietheart@10.1.2.213:/home/quietheart/tmpTrans/openoffice ./ 
quietheart@10.1.2.213's password: 
receiving file list ... 
3 files to consider 
deleting openoffice/aa 
openoffice/         
sent 26 bytes  received 156 bytes  72.80 bytes/sec 
total size is 196096007  speedup is 1077450.59

这里,本地中的 office 中有个 aa 文件在源目录中没有,使用 --delete 选项,所以就把它删除了(如果目标是远程机器,也会删除远程机器上面多余的文件)。如果不确定,可以实现使用 -n 假运行查看一下,输出都一样,不过不做实际的删除和传输。

使用 rsync 服务

不输入密码查看 rsync 服务器指定目录下的文件

$export RSYNC_PASSWORD=123456 
$ rsync --list-only quietheart@10.1.2.213::QuietHeart_tmpTrans 

+++++++++++++++++++++++++++ 

+ QuietHeart  rsync  2011 

+++++++++++++++++++++++++++ 


drwxrwxr-x        4096 2011/04/20 15:59:55 . 

-rw-r--r--        2245 2010/10/23 11:09:33 CentOS-Base.repo 

-rw-rw-r--   549402908 2010/11/22 17:04:13 RO50ForLinBeta.tar.gz 

-rwxr-xr-x       94304 2011/03/23 11:29:16 diablo 

-rw-rw-r--   127412115 2011/04/06 10:47:26 eclipse-linuxtools-helios-SR2-incubation-linux-gtk.tar.gz 

-rw-rw-r--      653338 2011/04/06 15:45:06 gtest-1.5.0.tar.bz2 

-rw-r--r--           0 2011/04/20 15:59:55 log_error 

-rw-rw-r--       11315 2011/04/15 19:41:31 log_error_20110415_19_37 

-rw-r--r--    12916624 2011/04/06 11:34:35 site-1.6.17.zip 

drwx------        4096 2011/04/25 09:56:12 zh-CN

这里, rsync 服务器 10.1.2.213 通过一个配置文件配置用户名,密码,以及 QuietHeart_tmpTrans (服务器展现给外面用于访问共享目录的虚拟目录名称),具体在后面配置 rsync 时候会说。事先设置好 RSYNC_PASSWORD 变量可以不用输入密码直接传输。

输入密码查看 rsync 服务器指定目录下的文件

$ unset RSYNC_PASSWORD 
$ rsync --list-only quietheart@10.1.2.213::QuietHeart_tmpTrans 
+++++++++++++++++++++++++++ 
+ QuietHeart  rsync  2011 
+++++++++++++++++++++++++++ 

Password: 
drwxrwxr-x        4096 2011/04/20 15:59:55 . 
-rw-r--r--        2245 2010/10/23 11:09:33 CentOS-Base.repo 
-rw-rw-r--   549402908 2010/11/22 17:04:13 RO50ForLinBeta.tar.gz 
-rwxr-xr-x       94304 2011/03/23 11:29:16 diablo 
-rw-rw-r--   127412115 2011/04/06 10:47:26 eclipse-linuxtools-helios-SR2-incubation-linux-gtk.tar.gz 
-rw-rw-r--      653338 2011/04/06 15:45:06 gtest-1.5.0.tar.bz2 
-rw-r--r--           0 2011/04/20 15:59:55 log_error 
-rw-rw-r--       11315 2011/04/15 19:41:31 log_error_20110415_19_37 
-rw-r--r--    12916624 2011/04/06 11:34:35 site-1.6.17.zip 
drwx------        4096 2011/04/25 09:56:12 zh-CN 
$ rsync --list-only quietheart@10.1.2.213::QuietHeart_tmpTrans/zh-CN 
+++++++++++++++++++++++++++ 
+ QuietHeart  rsync  2011 
+++++++++++++++++++++++++++ 

Password: 
drwx------        4096 2011/04/25 09:56:12 zh-CN 
$ rsync --list-only quietheart@10.1.2.213::QuietHeart_tmpTrans/zh-CN/ 
+++++++++++++++++++++++++++ 
+ QuietHeart  rsync  2011 
+++++++++++++++++++++++++++ 

Password: 
drwx------        4096 2011/04/25 09:56:12 . 
-rwxrwxr-x        3910 2010/06/22 20:30:45 update 
drwx------        4096 2010/06/22 20:30:45 DEBS 
drwx------        4096 2010/06/22 20:33:01 RO 
drwx------        4096 2010/06/22 20:30:45 licenses 
drwx------        4096 2011/04/25 09:55:34 readmes

这里,连续执行了次查看。如果不设置那个 RSYNC_PASSWORD 变量(这里使用 unset 取消这个变量之前的设置),那么就需要输入密码了。可以查看子目录的内容(例如这里的 zh-CN ),如果目录后面有'/'那么可以看到目录里面,如果没有'/'那么只显示那个目录名。

将文件通过服务形式拷贝到本地

$rsync --progress -avz quietheart@10.1.2.213::QuietHeart_tmpTrans ./ 
+++++++++++++++++++++++++++   
+ QuietHeart  rsync  2011 
+++++++++++++++++++++++++++ 

Password: 
receiving file list ... 
112 files to consider 
./ 
CentOS-Base.repo 
        2245 100%    2.14MB/s    0:00:00 (xfer#1, to-check=110/112) 
RO50ForLinBeta.tar.gz 
   549402908 100%    4.21MB/s    0:02:04 (xfer#2, to-check=109/112) 
...剩下的省略...

这样,将 10.1.2.213::QuietHeart_tmpTrans 中的内容拷贝到当前目录,这里注意拷贝之后没有最外层的 QuietHeart_tmpTrans 目录。

将文件通过服务形式拷贝到服务器(失败的情况)

$rsync --progress -avz ./rsynctest quietheart@10.1.2.213::QuietHeart_tmpTrans
+++++++++++++++++++++++++++ 
+ QuietHeart  rsync  2011 
+++++++++++++++++++++++++++ 

Password: 
building file list ... 
2 files to consider 
ERROR: module is read only 
rsync error: syntax or usage error (code 1) at main.c(747) [receiver=2.6.8] 
rsync: connection unexpectedly closed (4 bytes received so far) [sender] 
rsync error: error in rsync protocol data stream (code 12) at io.c(463) [sender=2.6.8]

这里,我配置了服务目录只读(参见后面配置文件中的 read only 选项),所以拷贝失败。

将文件通过服务形式拷贝到服务器(成功的情况)

$ rsync --progress -avz ./rsynctest quietheart@10.1.2.213::QuietHeart_tmpTrans 
+++++++++++++++++++++++++++ 
+ QuietHeart  rsync  2011 
+++++++++++++++++++++++++++ 

Password: 
building file list ... 
2 files to consider 
rsynctest/ 
rsynctest/aaa 
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/2) 
sent 138 bytes  received 44 bytes  72.80 bytes/sec 
total size is 0  speedup is 0.00

这里,我添加了可写权限(参见后面配置文件中的 read only 选项),所以拷贝成功。

其它

配置 rsync 服务举例

这里,介绍 rsync 服务的配置过程。

建立配置文件如下

[root@lv-k test]#mkdir /etc/rsyncd 
[root@lv-k test]#>> /etc/rsyncd/rsyncd.conf 
[root@lv-k test]#>> /etc/rsyncd/rsyncd.secrets 
[root@lv-k test]#chmod 600 /etc/rsyncd/rsyncd.secrets 
[root@lv-k test]#>> /etc/rsyncd/rsyncd.motd

这里, rsyncd.confrsync 服务的配置文件, rsyncd.secrets 存放使用 rsync 服务的用户名和密码(有说用户名应该是主机上存在的用户,但是实践发现可以不是主机上面已经存在的,密码随意), rsyncd.motd 存放登陆时候的欢迎信息。

配置文件内容如下

rsyncd.conf 文件:

###################### 
# Minimal configuration file for rsync daemon 
# See rsync(1) and rsyncd.conf(5) man pages for help 
pid file = /var/run/rsyncd.pid  
port = 873 
address = 10.1.2.213 
#uid = nobody 
#gid = nobody   
uid = root  
gid = root  
use chroot = yes 
read only = yes 
#limit access to private LANs 
#hosts allow=192.168.1.0/255.255.255.0 10.0.2.0/255.255.254.0 
hosts allow=* 
#hosts deny=* 
max connections = 5 
motd file = /etc/rsyncd/rsyncd.motd 
#This will give you a separate log file 
#log file = /var/log/rsync.log 
#This will log every file transferred - up to 85,000+ per user, per sync 
#transfer logging = yes 
log format = %t %a %m %f %b 
syslog facility = local3 
timeout = 300 
[QuietHeart_tmpTrans]  
path = /home/quietheart/tmpTrans  
list=yes 
ignore errors 
auth users = quietheart lv-k test1 
secrets file = /etc/rsyncd/rsyncd.secrets 
comment = quietheart tmpfile transfer dir 
#exclude =   home/  samba/   
######################

这里,文件的内容不细说了,自己应该能够悟出来,或者可以参见 man rsyncd.conf 一个关键的地方就是: hosts allow 可以设置访问的 IP ;以及后面设置可以访问的目录的组模块内容,组名就是给客户端看的名字例如这里的 QuietHeart_tmpTrans 。另外,如果设置 read only = no 那么别人就可以通过服务向这个地方写了。

rsyncd.secrets 文件:

###################### 
quietheart:123456 
lv-k:123456 
test1:test1 
######################

这个文件存放密码信息,管理可以使用 rsync 的用户以及相应的密码。

rsyncd.motd 文件:

###################### 
+++++++++++++++++++++++++++ 
+ QuietHeart  rsync  2011 
+++++++++++++++++++++++++++ 
######################

这里只存放一些登陆的时候打印的信息, motd 意思是: Message Of The Day

测试配置

[root@lv-k test]#rsync --daemon  --config=/etc/rsyncd/rsyncd.conf 
[root@lv-k test]#rsync --list-only quietheart@10.1.2.213::QuietHeart_tmpTrans 
+++++++++++++++++++++++++++ 
+ QuietHeart  rsync  2011 
+++++++++++++++++++++++++++ 

Password: 
drwxrwxr-x        4096 2011/04/20 15:59:55 . 
-rw-r--r--        2245 2010/10/23 11:09:33 CentOS-Base.repo 
-rw-rw-r--   549402908 2010/11/22 17:04:13 RO50ForLinBeta.tar.gz 
-rwxr-xr-x       94304 2011/03/23 11:29:16 diablo 
-rw-rw-r--   127412115 2011/04/06 10:47:26 eclipse-linuxtools-helios-SR2-incubation-linux-gtk.tar.gz 
-rw-rw-r--      653338 2011/04/06 15:45:06 gtest-1.5.0.tar.bz2 
-rw-r--r--           0 2011/04/20 15:59:55 log_error 
-rw-rw-r--       11315 2011/04/15 19:41:31 log_error_20110415_19_37 
-rw-r--r--    12916624 2011/04/06 11:34:35 site-1.6.17.zip 
drwx------        4096 2011/04/25 09:56:12 zh-CN

这里,先指定用配置文件 rsyncd.conf 启动 rsync 服务器,然后使用 --list-only 选项运行客户端(可以在其它机器上运行),当出现 Password 密码的时候,输入 123456 即可.

参考

上一篇 下一篇

猜你喜欢

热点阅读