86

Linux文件同步工具-rsync-寒衣-51CTO博客

 6 years ago
source link: http://blog.51cto.com/shuzonglu/2067054
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Linux文件同步工具-rsync

安装包


yum install -y rsync

rsync常用选项

-a:归档模式,表示递归方式传输文件,并保持所有属性;通-rlptgoD;
-r:同步目录时要加上,类似cp时加R;
-v:同步时显示一些信息,让我们知道同步国创;
-l:保留软链接;
-L:同步软链接时会把源文件给同步;
-p:保持文件权限属性;
-o:保持文件的属主;
-g:保持文件的属组;
-D:保持设备文件信息;
-t:保持文件的时间属性;
--delte:删除DEST中SRC没有的文件;
--exclude:过滤指定文件,如--exclude “logs”会把文件log过滤掉,不同步;
-P:显示同步过程,比如速率,比-v更加详细;
-u:如果DEST中的文件比SRC新,则不同步;
-z:测试时压缩;

rsync -av /etc/passwd /tmp/1.txt
将/etc/passwd备份到tmp/1.txt文件中

[root@shu-test ~]# rsync -av /etc/passwd /tmp/1.txt
sending incremental file list
passwd
sent 1229 bytes  received 31 bytes  2520.00 bytes/sec
total size is 1155  speedup is 0.92
[root@shu-test ~]# ls /tmp/
1.txt

备份到远程计算机

rsync -av /etc/passwd [email protected]:/tmp/2.txt
将/etc/passwd文件同步备份到192.168.188.2机器的/tmp/2.txt

[root@shu-test ~]# rsync -av /etc/passwd [email protected]:/tmp/2.txt
The authenticity of host '192.168.188.2 (192.168.188.2)' can't be established.
ECDSA key fingerprint is SHA256:vl9780juEAW/PspOqj/J4E4yHiQtIG6ZQ2R9S1OAdb8.
ECDSA key fingerprint is MD5:f8:71:01:1c:c1:71:88:97:d8:ca:25:88:79:45:17:1b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.188.2' (ECDSA) to the list of known hosts.
[email protected]'s password:
sending incremental file list
passwd
sent 1229 bytes  received 31 bytes  168.00 bytes/sec
total size is 1155  speedup is 0.92
[root@shu-test ~]# ls /tmp/
1.txt
2.txt
[root@shu-test ~]#

备份到远程计算机(ssh被修改端口情况下)

rsync -avP -e "ssh -p 22" /root/abc/ [email protected]:/tmp/test2/

[root@shu-test tmp]# rsync -avP -e "ssh -p 22" /root/abc/ [email protected]:/tmp/test2/
[email protected]'s password:
sending incremental file list
sent 365 bytes  received 19 bytes  109.71 bytes/sec
total size is 255434  speedup is 665.19
[root@shu-test tmp]#

注意:备份到远程服务器上,双方服务器都必须安装rsync包,才能备份;

同步文件夹

rsync -av /root/abc/ /tmp/111_dest/

[root@shu-test ~]# rsync -av /root/abc/ /tmp/111_dest/
sending incremental file list
created directory /tmp/111_dest
./
1.txt
2.txt
3.txt
ip.txt
a/
a/1.txt
a/2.txt
a/b/
a/b/2.txt
a/b/c/
a/k/
a/k11/
a/s/
test/
test/1.txt
test/2.txt
test/a.txt
sent 256259 bytes  received 233 bytes  512984.00 bytes/sec
total size is 255434  speedup is 1.00
[root@shu-test ~]# cd /tmp/
[root@shu-test tmp]# ls
111_dest  systemd-private-603500798f13486a90f57d6e2dd53912-chronyd.service-UCHrHd
1.txt     systemd-private-603500798f13486a90f57d6e2dd53912-vgauthd.service-UNh9hx
2.txt     systemd-private-603500798f13486a90f57d6e2dd53912-vmtoolsd.service-JJIguS
[root@shu-test tmp]#

删除备份目录中不属于源的文件

rsync -av --delete /root/abc/ /tmp/111_dest/
将/root/abc/ 文件夹中的文件备份到/tmp/111_dest/目录下,
并删除/tmp/111_dest/中不属于/root/abc/的文件;

[root@shu-test 111_dest]# touch new.txt
[root@shu-test 111_dest]# ls
1.txt  2.txt  3.txt  a  ip.txt  new.txt  test
[root@shu-test 111_dest]# rsync -av --delete /root/abc/ /tmp/111_dest/
sending incremental file list
./
deleting new.txt
sent 354 bytes  received 22 bytes  752.00 bytes/sec
total size is 255434  speedup is 679.35
[root@shu-test 111_dest]# ls
1.txt  2.txt  3.txt  a  ip.txt  test
[root@shu-test 111_dest]#

过滤指定文件不同步

rsync -av --exclude ".123" /root/abc/ /tmp/111_dest/备份/root/abc/到/tmp/111_dest/,但是不把.123的文件备份过去;

[root@shu-test abc]# ls
1.txt  2.txt  3.txt  a  a.123  ip.txt  test
[root@shu-test abc]# cat a.123
[root@shu-test abc]# rsync -av --exclude "*.123" /root/abc/ /tmp/111_dest/
sending incremental file list
./
sent 354 bytes  received 22 bytes  752.00 bytes/sec
total size is 255434  speedup is 679.35
[root@shu-test abc]# cd /tmp/111_dest/
[root@shu-test 111_dest]# ls
1.txt  2.txt  3.txt  a  ip.txt  test
[root@shu-test 111_dest]#
[root@shu-test 111_dest]# ls /root/abc/
1.txt  2.txt  3.txt  a  a.123  ip.txt  test
[root@shu-test 111_dest]#

保护备份后的文件中的新文件

rsync -avu /root/abc/ /tmp/111_dest/
如果/tmp/111_dest/中有比源文件新的文件,则保护新文件不被同步干掉;
并将/root/abc/ 同步到/tmp/111_dest/;

[root@shu-test abc]# cd /tmp/111_dest/
[root@shu-test 111_dest]# touch new.new
[root@shu-test 111_dest]# rsync -avu /root/abc/ /tmp/111_dest/
sending incremental file list
./
sent 368 bytes  received 22 bytes  780.00 bytes/sec
total size is 255434  speedup is 654.96
[root@shu-test 111_dest]# ls
1.txt  2.txt  3.txt  a  a.123  ip.txt  new.new  test
[root@shu-test 111_dest]# ls /root/abc/
1.txt  2.txt  3.txt  a  a.123  ip.txt  test
[root@shu-test 111_dest]#

同步到其他机器方法

通过ssh的方法

需要输入密码
rsync -avL /root/abc/ [email protected]:/tmp/test2/
或者
rsync -avL [email protected]:/tmp/test2/ /root/abc/

通过后台服务的方法

编辑配置文件

/etc/rsyncd.conf

添加文件内容

port=873        //监听端口873,默认为873端口;
log file=/var/log/rsync.log        //指定日志文件
pid file=/var/run/rsyncd.pid        //指定pid文件
address=192.168.188.2        //指定启动rsyncd服务的ip,默认为全部ip上启动;
[test]        //指定模块名,自定义;
path=/root/rsync        //指定数据存放路径
use chroot=true        //安全仿佛,默认为true,如果有软链接文件建议设置为false;
max connections=4        //指定最大连接数,默认为0,没有限制;
read only=no        //如果为true,则不能上传到该模块指定目录
list=true        //
uid=root        //指定传输时使用哪个用户名进行
gid=root        //指定传输时使用哪个用户组
auth users=test        //指定传输时要使用哪个用户名
secrets file=/etc/rsyncd.passwd    //指定密码文件,文件权限为600,格式:用户名:密码
hosts allow=192.168.133.132 1.1.1.1 2.2.2.2  192.168.133.0/24        //

注意:

必须创建目录/tmp/rsync、也就是path=/tmp/rsync
还有同步格式中的::后面的test表示为服务器自定义的模块名;
如果指定使用用户名,必须创建好密码文件、文件权限为600、内容格式为用户名:密码;例如user:user123
hosts allow表示允许访问服务器的ip 或ip段;
使用之前最好关闭firewalld
systemctl stop firewalld
systemctl disable firewalld

rsync --daemon

查看本机开启的端口

netstat -lnpt

[root@shu-test ~]# netstat -lnpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      805/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      890/master          
tcp        0      0 192.168.188.2:873       0.0.0.0:*               LISTEN      1075/rsync          
tcp6       0      0 :::22                   :::*                    LISTEN      805/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      890/master          
[root@shu-test ~]#

备份本机文件到服务器

rsync -avP /tmp/shu.test 192.168.188.2::test/shu-test.txt
在测试机器上将/tmp/shu.test文件备份到192.168.188.2服务器定义的目录下保存为shu-test.txt
定义目录为test模块也就是/tmp/rsync/目录下

[root@shu001 ~]# rsync -avP /tmp/shu.test 192.168.188.2::test/shu-test.txt
sending incremental file list
shu.test
        1155 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/1)
sent 1227 bytes  received 27 bytes  2508.00 bytes/sec
total size is 1155  speedup is 0.92
[root@shu001 ~]# ssh 192.168.188.2
Last login: Wed Jan 31 22:15:41 2018 from 192.168.188.1
[root@shu-test ~]# ls /tmp/rsync/
shu-test.txt
[root@shu-test ~]# exit
登出

备份服务器文件到本机

rsync -avP 192.168.188.2::test/shu-test.txt /tmp/abcdefg.test
将服务器上的文件备份到本机/tmp/目录下保存为abcdefg.test文件

[root@shu001 ~]# rsync -avP 192.168.188.2::test/shu-test.txt /tmp/abcdefg.test
receiving incremental file list
shu-test.txt
        1155 100%    1.10MB/s    0:00:00 (xfer#1, to-check=0/1)
sent 45 bytes  received 1262 bytes  2614.00 bytes/sec
total size is 1155  speedup is 0.88
[root@shu001 ~]# ls /tmp/
2.txt         systemd-private-e48a1f77672c4be982015a3e9b0c9d7f-chronyd.service-12q8Oj   test2
abcdefg.test  systemd-private-e48a1f77672c4be982015a3e9b0c9d7f-vgauthd.service-zesl7A
shu.test      systemd-private-e48a1f77672c4be982015a3e9b0c9d7f-vmtoolsd.service-9vvBzS
[root@shu001 ~]#

使用指定端口备份文件

rsync服务器指定端口为8730,本机不开放8730端口,那么就需要加上port命令来实现;
(使用rsync命令默认端口为873端口,一旦服务器指定端口改变,就必须加上port来备份)

rsync -avP --port 8730 192.168.188.2::test/shu-test.txt /tmp/abc.test

[root@shu001 ~]# rsync -avP --port 8730 192.168.188.2::test/shu-test.txt /tmp/abc.test
receiving incremental file list
shu-test.txt
        1155 100%    1.10MB/s    0:00:00 (xfer#1, to-check=0/1)
sent 45 bytes  received 1262 bytes  871.33 bytes/sec
total size is 1155  speedup is 0.88
[root@shu001 ~]# ls /tmp/
2.txt         systemd-private-e48a1f77672c4be982015a3e9b0c9d7f-chronyd.service-12q8Oj
abcdefg.test  systemd-private-e48a1f77672c4be982015a3e9b0c9d7f-vgauthd.service-zesl7A
abc.test      systemd-private-e48a1f77672c4be982015a3e9b0c9d7f-vmtoolsd.service-9vvBzS
shu.test      test2
[root@shu001 ~]#

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK