rsync工具使用详解

简介:

 rsync是linux/unix系统下的文件同步和数据传输工具,它采用“rsync算法”实现主机之间文件的同步。

rsync的主要特点:
1,rsync可以再中断传输之后恢复传输
2,rsync只传输源文件和目标文件之间不一致的部分
3,rsync可以执行完整或增量备份
4,可以使用基于ssh等方式传输文件
5,可以保持原有文件的所有属性信息
 
rsync的命令格式:
rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
 
rsync [OPTION]... [USER@]HOST:SRC DEST 
 
rsync [OPTION]... SRC [SRC]... DEST
 
rsync [OPTION]... [USER@]HOST::SRC [DEST]
 
rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
 
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DES
 
常用选项:
-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-z,在传输时对备份文件进行压缩处理
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息
-l, --links 保留软链结
-H, --hard-links 保留硬链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
 
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
--backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
 
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
 
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
--password-file=FILE 从FILE中得到密码
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
--port=PORT 指定其他的rsync服务端口
--progress 在传输时显示传输过程
--delete 删除那些DST中SRC没有的文件,即保证客户端和服务器目录内容的完全一致
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
--exclude 指定不需要传输的文件类型
 
rsync的四种工作模式:
一,本地shell应用模式
主要用于复制本地指定文件到本地另一个目录中
例1:复制指定的文件,到一个目录中
# rsync -av *.sh /tmp/
例2:复制整个目录及其中的文件到一个目录中
# rsync -av haha test/ 
例3:复制目录中的整个文件到另一个目录中(只有文件,没有haha目录)
# rsync -av haha/ test
注:目标参数末尾的斜杠没有任何作用
 
二,远程shell模式
主要用于把指定的本地目录复制到另一个系统中或是将一个系统中的文件复制到本地
例1:把本地目录复制到远程主机的/root/test目录中
# rsync -av haha root@172.16.30.5:/root
# rsync -av haha 172.16.30.5:test(如果使用的root用户的话,会自动在/root中创建一个test目录,并把haha目录及其目录中的内容复制其中)
例2:把远程主机上的目录复制到本地目录/中
# rsync -av root@172.16.30.5:/root/haha /
 
三,rsync列表模式
主要用于显示本地或是远程系统中的目录列表,并且递归显示
例1:显示本地系统的目录列表
# rsync -a haha/
drwxr-xr-x        4096 2012/06/24 14:27:31 .
drwxr-xr-x        4096 2012/06/24 14:28:20 lee
-rw-r--r--           0 2012/06/24 14:28:20 lee/lishengjia
例2:显示远程系统的目录列表
# rsync -a root@172.16.30.5:test(显示/root/test目录列表)
root@172.16.30.5's password: 
drwxr-xr-x        4096 2012/05/09 03:23:32 test
drwxr-xr-x        4096 2012/06/24 14:27:31 test/haha
-rw-r--r--           0 2012/06/24 14:25:05 test/haha/haha.txt
drwxr-xr-x        4096 2012/06/24 14:28:20 test/haha/lee
-rw-r--r--           0 2012/06/24 14:28:20 test/haha/lee/lishengjia
 
四,服务器模式
此模式基于C/S模式,在rsync服务器端运行一个守护进程,用于接受文件传输请求,而rsync客户端可以把文件发送给守护进程,也可以向守护进程请求文件。主要用于远程文件同步和数据备份。
 
案例:170.16.30.4作为web服务器,它的访问日志每天都要定时备份到172.16.30.5这台专门存放服务器访问 日志的主机上。
 
我们可以通过,把172.16.30.4作为rsync服务器端,172.16.30.5作为rsync客户端,然后通过crontab定时备份日志即可。
 
配置如下;
172.16.30.4上的配置:
1,安装rsync软件包
# yum -y install rsync
2,手动创建rsync的配额文件
# vim /etc/rsyncd.conf
#uid,gid指定以哪个用户身份运行rsync传输文件的守护进程
uid = nobody 
gid = nobody
#如果指定为true,那么rsync在传输文件以前首先chroot到path参数所指定的目录下,这样做的原因是实现额外的安全防护,但是缺点是需要root权限,并且不能备份指向外部的符号连接所指向的目录文件。一般使用no即可
use chroot = no
#指定并发连接服务器的个数
max connections = 10
#是否检查口令文件的权限,如果为yes,则密码文件必须为root所有
strict modes = yes
#以下指定pid,锁,日志文件的路径
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
 
#定义一个模块,可以有多个,web是对应模块的名称
[web]
# 指定要备份的文件或者目录
path = /var/log/httpd
#描述信息
comment = web server log  
#忽略无关的I/O错误
ignore errors
#设为no表示,客户端可以往服务器上上传文件;yes的话,不能上传
read only = no
#设为no表示客户端可下载文件;设为yes表示不能下载文件
write only = no
#设置允许连接rsync服务器的主机,*表示所有,也可以是网段
hosts allow = *
#设置禁止连接rsync服务器的主机
hosts deny = 172.16.30.1
#用于设定档客户请求可以使用的模块列表时,该模块是否被列出。true列出,false隐藏
list = false
#该选项指定当该模块传输文件时守护进程应该具有的uid和gid,默认值为全局定义的"nobody"
uid = root
gid = root
#定义可以连接该模块的用户名,和系统用户无关,多个用户名用空格或者,好隔开
auth users = jia
#指定一个“用户名:密码”格式的文件,用户名就是auth users指定的,密码要和客户端的密码文件对用起来
secrets file = /etc/server.pass
 
创建账户文件:
# vim /etc/server.pass
jia:leejia(第一个为用户名,第二个为对应的密码)
改变文件的权限:
# chmod 600 /etc/server.pass
 
3,开启rsync守护进程
# /usr/bin/rsync --daemon
查看:
# ps -ef |grep rsync
root     14879     1  0 00:14 ?        00:00:00 /usr/bin/rsync --daemon
root     14881 12749  0 00:14 pts/0    00:00:00 grep rsync 
 
172.16.30.5上的配置:
安装rsync软件包
# yum -y install rsync
创建一个密码文件,这用用rsync命令同步的时候,可以指定这个密码文件,不用手动输入密码:
# vim /etc/server.pass
leejia
更改权限:
# chmod 600 /etc/server.pass
 
测试文件是否能同步:
# /usr/bin/rsync -vzrtopg --delete --progress jia@172.16.30.4::web /tmp --password-file=/etc/server.pass
注:/tmp是客户端存放备份文件的目录
 
4,在172.16.30.5上建立计划任务,定时备份日志
# crontab -e
添加如下内容,在每天的3点40分进行备份
40 3 * * * /usr/bin/rsync -vzrtopg --delete --progress jia@172.16.30.4::web /tmp --password-file=/etc/server.pass









本文转自 leejia1989 51CTO博客,原文链接:http://blog.51cto.com/leejia/924121,如需转载请自行联系原作者
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
4月前
|
人工智能 数据可视化 开发者
深度解析基于LangGraph的Agent系统架构设计与工程实践
LangGraph作为Agent 生态中非常热门的框架,今天我将借助 LangGraph,更高效、更优雅的方式构建复杂智能体系统。
1324 2
|
9月前
|
Linux
CentOS U盘挂载指南
在 CentOS 中挂载 U 盘的步骤如下:1. 使用 `sudo fdisk -l` 或 `lsblk` 检测 U 盘设备(如 `/dev/sdb1`)。2. 创建挂载点 `sudo mkdir /mnt/usb`。3. 根据格式挂载 U 盘,如 FAT32 使用 `sudo mount -t vfat /dev/sdb1 /mnt/usb -o rw,uid=1000,gid=1000`。4. 访问数据 `cd /mnt/usb && ls -l`。5. 卸载 `sudo umount /mnt/usb`。常见问题包括权限和中文乱码,可添加相应参数解决。
811 2
|
存储 运维 安全
云上金融量化策略回测方案与最佳实践
【飞天技术沙龙—阿里云金融量化策略回测Workshop】在上海诺亚财富中心正式举行,汇聚多位行业专家,围绕量化投资的最佳实践、数据隐私安全、量化策略回测方案等议题进行深入探讨。
|
搜索推荐 数据挖掘 API
淘宝商品API接口的对接及收益
淘宝商品API接口是淘宝开放平台提供的数据服务,支持商品搜索、详情、评价等功能,帮助开发者快速获取商品数据,提升用户体验,降低运营成本,增强市场竞争力,并支持数据分析和业务决策。对接流程包括注册账号、获取API密钥、阅读文档、编写请求代码、发送请求、解析数据、错误处理和日志记录等步骤。通过实际案例,如价格比较网站、库存管理工具、个性化推荐系统等,展示了API接口的应用价值。
432 5
ElementPlus 之 el-select 多选实现全选功能
本文介绍了在ElementPlus框架中,如何通过自定义事件处理和条件判断实现`el-select`多选控件的全选功能。
2295 1
ElementPlus 之 el-select 多选实现全选功能
|
机器学习/深度学习 自然语言处理 搜索推荐
探索深度学习与自然语言处理(NLP)在智能客服系统中的创新应用
探索深度学习与自然语言处理(NLP)在智能客服系统中的创新应用
906 1
|
存储 数据采集 Java
Spring Boot 3 实现GZIP压缩优化:显著减少接口流量消耗!
在Web开发过程中,随着应用规模的扩大和用户量的增长,接口流量的消耗成为了一个不容忽视的问题。为了提升应用的性能和用户体验,减少带宽占用,数据压缩成为了一个重要的优化手段。在Spring Boot 3中,通过集成GZIP压缩技术,我们可以显著减少接口流量的消耗,从而优化应用的性能。本文将详细介绍如何在Spring Boot 3中实现GZIP压缩优化。
1820 6
|
人工智能 自然语言处理 监控
AI技术如何应用到制造业?
【7月更文挑战第23天】AI技术如何应用到制造业?
589 2
|
数据采集 算法 数据处理
LabVIEW软件开发任务的工作量估算方法
LabVIEW软件开发任务的工作量估算方法
255 1
|
Java 网络安全 网络架构
【Java】已解决java.net.ConnectException异常
【Java】已解决java.net.ConnectException异常
3414 0