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 有几种传输方式:
- 本地传输 rsync [OPTION]... SRC DEST
- 使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。如:
rsync -avz *.c foo:src
- 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:rsync -av /databack root@192.168.78.192::www
rsync ssh传输
rsync -vzrtopg --progress -e ssh --delete work@172.16.78.192:/www/* /databack/experiment/rsync
这种方式通过使用-e ssh 指定了使用ssh方式传输,所以传输的时候就要user@host:/dir/ 方式传输,
如果ssh 没有写user@ 是默认使用当前终端用户
rsync -avP -e "ssh -p 10087" /data/bak/2017-08-29_17-32-35 10.13.114.111:/data/
这个是指定SSH端口的传输,因为默认是端口22
-a 递归复制所有文件,并保持文件时间所属用户权限; -e 是命令, 加个双引号把ssh 配置另外扩起来
rsync 使用配置文件默认传输方式
rsync其主配置文件为“/etc/rsyncd.conf”,我们可以通过这个配置文件来配置传输的用户和目录,这个是不同于ssh传输的,ssh使用的校验用户是linux的用户系统,这里的配置是独立的,需要另外配置用户名:密码
rsync 配置/etc/rsyncd.conf插入如下内容:
log file=/var/log/rsyncd.log
port=8873
list=false
uid = nobody
gid = nogroup
max connections=4
read only = false
secrets file = /etc/rsync.password
[trace_logs]
comment = trace logs
path = /home/project/zs-admin/data/
hosts allow = 123.58.175.40 123.58.175.41 10.82.156.11 10.82.156.12
auth users = rsync_backup
[statistics_sync]
comment = stat sync
path = /home/project/nemu-statistics/activity/
hosts allow = psigor-*-igor.i.nease.net psigor-*-storage.i.nease.net 123.58.175.40 123.58.175.41 10.82.156.11 10.82.156.12
auth users = rsync_stat
创建密码文件 /etc/rsync.password,采用这种方式不能使用系统用户对客户端进行认证,所以需要创建一个密码文件,其格式为“username:password”,用户名可以和密码可以随便定义,最好不要和系统帐户一致,同时要把创建的密码文件权限设置为600,这在前面的模块参数做了详细介绍。
echo "rsync_stat:abc123" > /etc/rsync.passwd
chmod 600 /etc/rsyncd.passwd
这上面定义了两个模块 [trace_logs] 和 [statistics_sync] ,分别定义了两个用户,用户传输的,而校验的密码也写到另外一个文件 /etc/rsync.passwd
定义好以后,我们使用下面命令传输:
rsync -avz --port=8873 /home/lidongwei/tmp/a.php rsync_stat@10.82.156.12::statistics_sync/data/
Password:
我们看到的目的地使用了rsync_stat@10.82.156.12::statistics_sync/data/, 这里要说明下:
- 首先我们看到,我们指定了rsync监听的端口,配置文件里面定义的,默认是873, 而不是使用ssh的端口。
- rsync_stat是我们在配置文件定义的用户名
- 两个冒号::statistics_sync/data/ 这里表示使用了rsync自带的传输方式,而statistics_sync是我们在配置文件定义的模块名,它定义了我们目标位置目录:path = /home/project/nemu-statistics/activity/ ,::statistics_sync/data/ 表示我们要传输文件到/home/project/nemu-statistics/activity/data/ 目录
- 输入的密码是我们在配置文件 /etc/rsync.password 定义的,格式是user:password,这里是rsync_stat:123456
rsync 错误处理
上面的例子使用 rsync 出错:rsync: chgrp "XXXX" failed: Operation not permitted
这是因为我们使用了-a
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD。
而-o -g 分别代表保持文件所有者和组
-o, --owner preserve owner (super-user only)
-g, --group preserve group
但是我们使用的是rsync_stat这个用户啊,没有权限修改文件的组和所有者。就会报错,解决方法:
rsync -avz --no-o --no-g --port=8873 /home/lidongwei/tmp/a.php rsync_stat@10.82.156.12::statistics_sync/data/
使用 rsync 出错:rsync: chgrp "XXXX" failed: Operation not permitted
参考:http://man.linuxde.net/rsync
https://segmentfault.com/a/1190000000444614
网友评论