rsync 的常用参数如下: --partial 当有部分文件传输完成,再次传输的时候,会保留已经完成的部分; --progress 打印文件传输的进度 -P 该参数与 --partial --progress 相同, 表示打印文件传输进度,而对于重传发生的时候,会自动保留已经成功传输的部分 -v 表示 同步的时候,显示详细信息 -a 等同于 -rlptgoD , 但是没有 -A (保留acl ), -H (保留硬链接), -X (保留 extended attributes),因为acl,extended attributes 需要目标文件系统支持才可能实现保留 -r : 递归到目录中 -l : 保留软链接 -p : 保留文件的权限 -t : 保留文件的修改时间 -g : 保留所属组 -o : 保留 所属者 -D : 与 --devices --specials 相同,表示保留 设备文件以及特殊文件; 所以常用的参数为: rsync -avP
我们知道,rsync 默认采用873 端口来进行通信,当有client连接进来的时候,会创建一个新的socket, 从而建立连接;这样可能面临被攻击的风险,比如黑客成功和rsync建立了新的socket连接(873端口). 所以,我们可能面临这样的需求: 在server端"不创建新的socket连接",但是依然要实现数据的传输; rsync是支持这种特性的; 没有 socket 连接不能实现网络通信,而又不能创建新的socket连接,那么要实现网络通信就只能使用 :已经处于listen状态的socket来进行通信;rsync的 -e 参数就是用来支持这个特定的: 当指定 -e 参数后,比如 rsync -e "ssh -l ssh_id -p PORT " rsync_user@REMOTE:/PATH/TO/COPY ./ , 这个命令的执行过程如下: 因为-e 指定了远程shell, 所以 rsync 会利用ssh 方式连接到目标服务器,ssh的用户是 ssh_id , 端口是 PORT, 成功连接后,会spawn 一个单用户的rsync 进程,从而保证了当前的rsync传输数据的安全性,因为没有其他用户可以访问这个进程 . 如果不指定ssh的用户,那么默认的 rsync_user 用户被用作ssh的用户;