同步命令
# rsync -vzrtopg --progress hadoop@192.168.5.172::hadoop /usr/local/hadoop/etc/hadoop #在服务端touch一个文件,同步后就会出现
使用crontab实现定时自动同步功能
# vim /etc/rsync.pwd #密码要跟服务端一致
hadoop
# chmod 0600 /etc/rsync.pwd
# crontab -e
*/1 * * * * rsync -a --delete --password-file=/etc/rsync.pwd hadoop@192.168.5.172::hadoop /usr/local/hadoop/etc/hadoop
*/1 * * * * rsync -a --delete --password-file=/etc/rsync.pwd hbase@192.168.5.53::hbase /usr/local/hbase/conf
参数说明:
-a 递归方式传输文件,并保持文件属性,等价-rlptgoD不包含-H <--
-r 子目录以递归模式处理
-l 保持符号链接文件
-H 保持硬链接文件
-p 保持文件权限
-t 保持文件时间信息
-g 保持文件归属组信息
-o 保持文件归属用户信息
-D 保持设备文件和特殊文件
-z 在传输文件时进行压缩处理 <--
--exclude=PATTERN 指定排除一个不需要传输文件匹配模式
--exclude-from=FILE 从FILE中读取排除规则
--include=PATTERN 指定需要传输的文件匹配模式
--include-from=FILE 从FILE中读取匹配规则
--copy-unsafe-links 复制指向复制源路径目录以外的链接文件
--safe-links 忽略指向复制源路径目录以外的链接文件(默认)
--existing 仅更新那些已经存在于接收端的文件,而不复制新创建文件
--ignore-existing 忽略那些已经存在于接收端的文件,只复制新创建文件
-b 当有变化时,对目标目录中的旧文件进行备份
--backup-dir=DIR 与-b结合使用,指定备份路径
--link-dest=DIR 当文件未改变时在指定路径创建硬链接文件
--delete 删除接收端还存在而保存端不存在的文件 <--
--delete-before 接收端在传输之前进行删除操作(默认)
--delete-during 接收端在传输过程中进行删除操作
--delete-after 接收端在传输之后进行删除操作
--delete-excluded 接收端在传输同时进行删除操作
-e,--rsh=COMMAND 指定代替rsh的shell程序,例如可以指定为ssh <--
--ignore-erros 即使出现I/O错误也要进行删除
--partial 保留因故没有完全传输的文件,以加快随后的再次传输,即断点续传 <--
--progress 在传输时显示传输过程 <--
-P 等价于--partial --progress <--
--delay-updates 将正在更新的文件先保存到.~tmp~临时目录,待传输完毕再更新目标文件
-v,--verbose 详细输出模式 <--
-q,--quiet 精简输出模式
-h,--human-readable 输出文件大小
-n,--dry-run 显示那些文件将要被传输
--list-only 仅列出文件而不进行复制
--rsync-path=PROGRAM 指定远程服务器上的rsync命令所在路径
--password-file=FILE 指定从FILE中读取口令,避免在终端中输入口令
-4,-6 使用IPv4或者IPv6
--version 打印版本信息
--help 显示帮组信息
几个常用的例子
- 在本地机器上对两个目录同步
$ rsync -zvr filename1 filename2
上述代码是将filename1中的文件与filename2中的文件同步,如果将filename2中的文件同步到filename1中,修改代码为:
$ rsync -zvr filename2 filename1
- 使用rsync –a 同步保留时间按标记
$ rsync -azv filename1 filename2
使用上述命令,将filename2中新同步的文件的时间与filename1中的创建的时间相同,它保留符号链接、权限、时间标记、用户名及组名相同。
- 将远程服务器的文件同步到本地
$ rsync -avz ubuntu@192.168.0.1:/home/ubuntu/filename2 filename1
上述命令是将远程192.168.0.1的主机上filename2同步到本地的filename1。
注意:如果远程主机的端口不是默认的22端口,假如是4000端口,上述的命令修改为:
$ rsync -avz ‘-e ssh -p 4000‘ ubuntu@192.168.0.1:/home/ubuntu/filename2 filename1
- 从本地同步文件到远程服务器
$ rsync -avz filename1 ubuntu@192.168.0.1:/home/ubuntu/filename2
上述命令是将本地的filename1同步到远程192.168.0.1的主机上。
同理如果端口不是22,使用以下命令:
$ rsync -avz ‘-e ssh -p 4000‘ filename1 ubuntu@192.168.0.1:/home/ubuntu/filename2
- 同步时排除文件和目录
$ rsync -aP --rsh=ssh --exclude exclude-file --exclude exclude-dir/ /tmp/test/* 192.168.0.1:/tmp/test/
- 同步etc目录里面的所有文件
rsync -aP /etc/ /home/backups/
等同于:
rsync -aP /etc/* /home/backups/
- 同步etc整个目录
rsync -aP /etc /home/backups/