rsync 工具介绍
rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
- 安装rsync:yum install -y rsync
rsync 六种不同的模式
命令格式 | 工作模式 |
---|---|
rsync[OPTION]... SRC DEST | 同步本地文件。当SRC和DES路径信息都不包含有单个冒号“:”分隔符时就启动这工作模式。 |
rsync[OPTION]... SRC [USER@]HOST:DEST | 将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号“:”分隔符时启动该模式。 |
rsync[OPTION]... [USER@]HOST:SRC DEST | 将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号“:”分隔符时启动该模式。 |
rsync[OPTION]... [USER@]HOST::SRC DEST] | 使用一个远程shell程序(如ssh、rsh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含两个冒号“:”分隔符时启动该模式。 |
rsync[OPTION]... SRC [USER@]HOST::DEST | 使用一个远程shell程序(如ssh、rsh)来实现将本地机器的内容拷贝到远程机器。当DEST地址路径包含两个冒号“:”分隔符时启动该模式。 |
rsync[OPTION]... rsync://[USER@]HOST[:PORT]/SRC[DEST] | 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。 |
注意: src表示源文件,dest表示目的文件
rsync 常用选项
rsync 常用选项
- -a 包含rtplgoD
- -r:同步目录时加上表示对子目录进行递归处理
- -t:保持文件的时间属性
- -p(小写):保持文件的权限属性
- -l:保留软链接
- -g:保存文件数组
- -o:保持文件的属组
- -D:保存设备文件信息
- -v:可视化(visual)
- -L:同步软链接的同时同步其源文件
- -P(大写):显示同步过程,比v更详细
- -u:update,加上该选项,如果DEST中文件比SRC中的新,则不同步
- -z:gzip,传输时压缩
- --delete:删除DEST中SRC没有的文件
- --exclude:过滤指定文件,如--exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不同步
rsync 常用选项的应用
-
同步本地机器上的文件
[root@localhost ~]# rsync -av /root/abc/ /tmp/abc_dest/
sending incremental file list
created directory /tmp/abc_dest
./
1.txt
1.tx~
test123.txt -> /root/test/test
a/
sent 200 bytes received 60 bytes 520.00 bytes/sec
total size is 15 speedup is 0.06
[root@localhost ~]# ls -l /tmp/abc_dest/
总用量 0
-rw-r--r--. 1 root root 0 12月 5 15:00 1.tx~
-rw-r--r--. 1 root root 0 12月 5 15:00 1.txt
drwxr-xr-x. 2 root root 6 12月 5 14:59 a
lrwxrwxrwx. 1 root root 15 12月 5 15:04 test123.txt -> /root/test/test
[root@localhost ~]# rsync -avL /root/abc/ /tmp/abc_dest
sending incremental file list
test123.txt
sent 1287 bytes received 32 bytes 2638.00 bytes/sec
total size is 1151 speedup is 0.87
[root@localhost ~]# ls -l /tmp/abc_dest/
总用量 4
-rw-r--r--. 1 root root 0 12月 5 15:00 1.tx~
-rw-r--r--. 1 root root 0 12月 5 15:00 1.txt
drwxr-xr-x. 2 root root 6 12月 5 14:59 a
-rw-r--r--. 1 root root 1151 11月 25 11:04 test123.txt
没加-L参数时候,同步数据时会把软链接同步过来,加了-L参数后,同步数据时把软链接文件对应的源文件同步过来。
-
--delete 删除DEST中SRC没有的文件
[root@localhost ~]# ls abc/
1.tx~ 1.txt a test123.txt
[root@localhost ~]# ls /tmp/abc_dest/
1.tx~ 1.txt a new.txt test123.txt
[root@localhost ~]# rsync -avL --delete /root/abc/ /tmp/abc_dest/
sending incremental file list
./
deleting new.txt
sent 96 bytes received 16 bytes 224.00 bytes/sec
total size is 1151 speedup is 10.28
[root@localhost ~]# ls /tmp/abc_dest/
1.tx~ 1.txt a test123.txt--delete可以比较源文件和目标文件,当目标文件比源文件多某个文件时,使用--delete参数可以将目标文件中多出来的文件删除。如果不加--delete参数,只会同步源文件中的文件,目标文件中多余的文件不会动。
-
--exclude 过滤指定文件
[root@localhost ~]# rsync -av --exclude "*.txt" /root/abc/ /tmp/abc_dest/
sending incremental file list
./
1.tx~
a/
sent 107 bytes received 38 bytes 290.00 bytes/sec
total size is 0 speedup is 0.00
[root@localhost ~]# ls /tmp/abc_dest/
1.tx~ a
[root@localhost ~]# ls abc/
1.tx~ 1.txt 2.txt a test123.txt--exclude "*.txt" 同步时,不同步以.txt结尾的文件。如果需要过滤多个条件,则需要用多个--exclude。
-
-P(大写)显示同步过程,比v更详细。
[root@localhost ~]# rsync -avP /root/abc/ /tmp/abc_dest/
sending incremental file list
./
1.txt
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=4/6)
1.tx~
0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=3/6)
2.txt
7 100% 0.00kB/s 0:00:00 (xfer#3, to-check=2/6)
test123.txt -> /root/test/test
a/sent 268 bytes received 79 bytes 694.00 bytes/sec
total size is 22 speedup is 0.06使用大写p参数,可以显示同步传输的速度、和进度。传输大文件时很实用。
-
-u:update
[root@localhost ~]# cat /root/abc/123
test 20171201
[root@localhost ~]# cat /tmp/abc_dest/123
test 20171205
test 20171205
[root@localhost ~]# rsync -avu /root/abc/ /tmp/abc_dest/
sending incremental file list
./
sent 146 bytes received 16 bytes 324.00 bytes/sec
total size is 36 speedup is 0.22
[root@localhost ~]# cat /tmp/abc_dest/123
test 20171205
test 20171205
[root@localhost ~]# cat /root/abc/123
test 20171201加上该选项,如果DEST中文件比SRC中的新,则不同步。
通过ssh同步
通过ssh同步的两台机器需要相互之间可以通信,并且两台都要安装rsync工具。
-
通过ssh的方式,将一台机器的文件同步到另一台机器。
[root@localhost ~]# rsync -av /etc/passwd 192.168.159.130:/tmp/2017.txt
root@192.168.159.130's password:
sending incremental file list
passwd
sent 1202 bytes received 31 bytes 352.29 bytes/sec
total size is 1128 speedup is 0.91将本地 /etc/passwd 文件同步到远程主机192.168.159.130.
注意: 同步到远程主机上时,如果没选择用户,则当前是那个用户在操作,就那个用户登录远程主机(远程主机上需要有相同的用户)。
[root@localhost ~]# rsync -av 192.168.159.130:/tmp/2017.txt /tmp/201712.txt
root@192.168.159.130's password:
receiving incremental file list
2017.txt
sent 30 bytes received 1209 bytes 354.00 bytes/sec
total size is 1128 speedup is 0.91
[root@localhost ~]# ls /tmp
201712.txt
从远程机器192.168.159.130 将文件同步到本地机器。
把文件从本地机器同步到远程机器叫推文件,从远程机器同步到本地机器叫拉文件。
-
当远程机器的端口不是22端口时,需要使用-e参数
[root@localhost ~]# rsync -av -e "ssh -p 2200" /etc/passwd 192.168.159.130:/tmp/2017.txt
-e "ssh -p 2200" 使用2200端口
- ssh -p 22 192.168.159.130
ssh 通过22端口远程登录到192.168.159.130 这台机器。