在Linux服务器运维中,文件同步、数据备份是高频需求——无论是本地不同目录的文件同步,还是远程服务器间的资料传输,亦或是WordPress站点的备份,rsync 都是不可或缺的工具。它凭借“增量同步”的核心优势,只传输变化的文件,大幅节省带宽和时间,比传统的cp、scp命令更高效、更灵活。
本文将从rsync的核心特性、安装方法、基础语法入手,逐步深入到本地/远程同步、配置文件、实战案例及常见问题排查,全程干货,新手也能跟着操作,尤其适合运维新手和需要备份WordPress站点的站长。
一、rsync 核心特性:为什么选择它?
rsync(Remote Sync,远程同步)是一款开源的文件同步工具,诞生于1996年,经过多年迭代,成为Linux系统中最主流的同步/备份工具,核心优势如下:
- 增量同步:这是rsync最核心的功能,首次同步时传输全部文件,后续仅传输“源文件与目标文件的差异部分”,极大提升效率、节省带宽(尤其适合大文件、远程同步场景)。
- 多场景支持:支持本地同步、远程同步(SSH协议、rsync协议),可实现“本地→远程”“远程→本地”“远程→远程”三种同步方向。
- 文件属性保留:同步时可保留文件的权限、所有者、组、时间戳、软链接等属性,避免同步后文件权限异常(对网站备份至关重要)。
- 灵活可控:支持排除指定文件/目录、断点续传、模拟同步(测试命令有效性)、删除目标端多余文件等功能,适配各种复杂需求。
- 轻量高效:占用系统资源少,传输速度快,可后台运行,适合定时备份任务(结合crontab使用)。
简单来说,如果你需要备份WordPress站点、同步服务器文件、迁移数据,rsync是比cp、scp更省心、更高效的选择。
二、rsync 安装:不同系统快速部署
绝大多数Linux发行版(CentOS、Ubuntu、Debian)默认自带rsync,可通过以下命令检查是否安装:
rsync --version
若提示“command not found”,则执行对应系统的安装命令:
1. CentOS / RHEL 系统
yum install rsync -y
2. Ubuntu / Debian 系统
apt update && apt install rsync -y
3. 验证安装
安装完成后,再次执行 rsync --version,出现版本信息即表示安装成功。
三、rsync 基础语法:必记核心格式
rsync的语法看似复杂,实则有固定规律,核心格式分为两种:本地同步和远程同步,先记住最基础的通用格式:
rsync [选项] 源路径 目标路径
关键说明:
- 源路径:需要同步的文件/目录(本地路径或远程路径);
- 目标路径:同步后的文件/目录存放位置(本地路径或远程路径);
- 选项:rsync的核心功能,通过不同选项实现增量同步、权限保留等需求(下文重点讲解)。
重点注意:源路径末尾的“/”差异
这是rsync最容易踩坑的细节,源路径末尾是否加“/”,会导致完全不同的同步结果,新手一定要牢记:
- 不带尾随斜杠(如 /home/test):同步整个“test目录”(包括目录本身)到目标路径;
- 带尾随斜杠(如 /home/test/):同步“test目录内的所有内容”(不包括目录本身)到目标路径。
示例:假设源路径为 /home/test(内含1.txt、2.txt),目标路径为 /backup:
# 不带斜杠:同步后 /backup 下会多一个 test 目录,即 /backup/test/1.txt
rsync -av /home/test /backup
# 带斜杠:同步后 /backup 下直接是 1.txt、2.txt,无 test 目录
rsync -av /home/test/ /backup
四、rsync 核心选项:常用必记(新手重点)
rsync的选项很多,但新手只需掌握以下常用选项,就能应对90%的场景,建议收藏:
| 选项 | 全称 | 功能说明 |
|---|---|---|
| -a | –archive | 归档模式(最常用),相当于 -rlptgoD,自动保留文件权限、所有者、组、时间戳、软链接等属性,适合备份 |
| -v | –verbose | 显示详细同步过程(如传输的文件、进度),便于排查问题 |
| -z | –compress | 传输时压缩文件,节省带宽(适合远程同步、大文件传输) |
| -P | –partial –progress | 断点续传(传输中断后,下次可继续传输)+ 显示传输进度 |
| –delete | 无 | 删除目标路径中“源路径没有”的文件,实现“源路径与目标路径完全一致”(慎用,避免误删) |
| -n | –dry-run | 模拟同步,不实际执行传输、删除操作,用于测试命令是否正确(新手必用) |
| -e | –rsh=COMMAND | 指定远程shell,常用 -e ssh(通过SSH协议进行远程同步,默认端口22) |
| –exclude | 无 | 排除指定文件/目录(如临时文件、日志文件,可多次使用) |
| -a | –archive | 归档模式(最常用),相当于 -rlptgoD,自动保留文件权限、所有者、组、时间戳、软链接等属性,适合备份 |
| -a | –archive | 归档模式(最常用),相当于 -rlptgoD,自动保留文件权限、所有者、组、时间戳、软链接等属性,适合备份 |
常用组合选项(新手直接套用)
-av:本地同步,保留文件属性,显示详细过程(最常用);-avzP:远程同步,压缩传输、断点续传、显示进度(适合大文件、远程备份);-av --delete -n:模拟同步,删除目标端多余文件,测试命令是否正确(避免误删)。
五、rsync 实战操作:本地+远程同步(重点)
结合实际运维场景,讲解最常用的同步案例,新手跟着敲命令即可,所有案例均经过实测,可直接套用。
场景1:本地同步(最基础,适合本地备份)
需求:将 /home/wordpress(WordPress站点目录)同步到 /backup/wordpress_backup,保留文件属性,显示详细过程。
# 带斜杠:同步站点目录内所有内容到备份目录(推荐,避免多一层目录)
rsync -av /home/wordpress/ /backup/wordpress_backup
# 不带斜杠:同步整个wordpress目录到备份目录(会生成 /backup/wordpress_backup/wordpress)
rsync -av /home/wordpress /backup/wordpress_backup
补充:若需排除站点的临时文件(如 /home/wordpress/tmp)和日志文件(如 /home/wordpress/logs),可添加 –exclude 选项:
rsync -av --exclude="tmp" --exclude="logs" /home/wordpress/ /backup/wordpress_backup
场景2:远程同步(本地→远程,适合站点备份到远程服务器)
需求:将本地 /home/wordpress 目录,同步到远程服务器(IP:192.168.1.100)的 /backup/wordpress 目录,通过SSH协议,压缩传输、断点续传。
# 核心命令(远程服务器用户名:root,端口:22,默认端口可省略 -e "ssh -p 22")
rsync -avzP -e "ssh -p 22" /home/wordpress/ root@192.168.1.100:/backup/wordpress
说明:
- 执行命令后,会提示输入远程服务器root用户的密码(若配置了SSH密钥登录,可免密码同步,下文会讲);
- -e “ssh -p 22″:指定通过SSH协议同步,端口22(若远程服务器SSH端口修改,需替换为实际端口,如 -e “ssh -p 2222″);
- 远程路径格式:
用户名@远程IP:远程目录(注意冒号后面没有空格)。
场景3:远程同步(远程→本地,适合从远程服务器拉取备份)
需求:从远程服务器(IP:192.168.1.100)的 /backup/wordpress 目录,拉取文件到本地 /home/wordpress_restore 目录,用于站点恢复。
rsync -avzP -e "ssh -p 22" root@192.168.1.100:/backup/wordpress/ /home/wordpress_restore
注意:远程路径末尾加“/”,表示拉取目录内所有内容,避免本地多一层目录。
场景4:免密码远程同步(SSH密钥配置,推荐)
如果需要定时同步(结合crontab),每次输入密码会很麻烦,配置SSH密钥登录,可实现免密码同步:
# 1. 本地生成SSH密钥(一路回车,不要设置密码)
ssh-keygen -t rsa
# 2. 将本地公钥复制到远程服务器(替换远程IP和用户名)
ssh-copy-id -p 22 root@192.168.1.100
# 3. 测试免密码登录(无需输入密码即成功)
ssh -p 22 root@192.168.1.100
# 4. 此时执行rsync远程同步,无需输入密码
rsync -avzP /home/wordpress/ root@192.168.1.100:/backup/wordpress
场景5:rsync 配置文件(守护进程模式,适合多客户端同步)
如果需要多台客户端同步到同一台服务器,可配置rsync守护进程(rsync协议),更安全、更易管理。rsync的配置文件默认在 /etc/rsyncd.conf,若不存在可手动创建。
1. 配置步骤
# 1. 创建配置文件目录(推荐,便于管理)
mkdir /etc/rsyncd
touch /etc/rsyncd/rsyncd.conf
ln -s /etc/rsyncd/rsyncd.conf /etc/rsyncd.conf
# 2. 编辑配置文件(vi /etc/rsyncd/rsyncd.conf)
# 全局配置(所有模块生效)
uid = root
gid = root
port = 873 # rsync默认端口
pid file = /var/run/rsyncd.pid # PID文件路径
log file = /var/log/rsyncd.log # 日志文件路径
hosts allow = 192.168.1.0/24 # 允许同步的客户端IP网段(其他IP禁止访问)
# 模块配置(可配置多个模块,每个模块对应一个同步目录)
[wordpress_backup] # 模块名(客户端访问时使用)
path = /backup/wordpress # 同步目录(服务器端)
comment = WordPress Backup # 模块描述
read only = no # 允许客户端上传文件(no=可上传,yes=只读)
auth users = rsync_user # 授权用户(自定义,与系统用户无关)
secrets file = /etc/rsyncd/rsyncd.passwd # 密码文件路径
# 3. 创建密码文件(权限必须为600,否则报错)
touch /etc/rsyncd/rsyncd.passwd
echo "rsync_user:123456" >> /etc/rsyncd/rsyncd.passwd # 格式:用户名:密码
chmod 600 /etc/rsyncd/rsyncd.passwd
# 4. 启动rsync守护进程
systemctl start rsyncd
systemctl enable rsyncd # 设置开机自启
# 5. 查看守护进程状态(确认启动成功)
systemctl status rsyncd
2. 客户端同步(rsync协议)
客户端无需配置,直接执行以下命令,即可同步服务器模块内容:
# 客户端本地→服务器(同步本地目录到服务器模块)
rsync -avzP /home/wordpress/ rsync_user@192.168.1.100::wordpress_backup
# 客户端服务器→本地(拉取服务器模块内容到本地)
rsync -avzP rsync_user@192.168.1.100::wordpress_backup /home/wordpress_restore
说明:rsync协议的路径格式为用户名@远程IP::模块名(两个冒号),执行时输入密码文件中设置的密码即可。
六、rsync 定时同步:结合crontab实现自动备份
对于WordPress站点备份、服务器数据同步,定时自动同步是刚需,结合Linux的crontab定时器,可实现无人值守同步。
需求:每天凌晨2点,将本地 /home/wordpress 目录同步到远程服务器(192.168.1.100)的 /backup/wordpress 目录,保留日志便于排查。
步骤1:创建同步脚本(推荐,便于维护)
# 创建脚本文件
vi /home/rsync_wordpress_backup.sh
# 脚本内容(复制粘贴,修改对应路径和IP)
#!/bin/bash
# WordPress站点自动备份脚本
DATE=$(date +%Y%m%d) # 日期格式(如20260427)
LOG_FILE="/var/log/rsync_backup_$DATE.log" # 日志文件(按日期命名)
# 同步命令(免密码同步,若未配置密钥,需手动输入密码,不适合定时)
rsync -avzP /home/wordpress/ root@192.168.1.100:/backup/wordpress >> $LOG_FILE 2>&1
# 日志提示
echo "[$(date +%Y-%m-%d %H:%M:%S)] 同步完成,日志路径:$LOG_FILE" >> $LOG_FILE
# 给脚本添加执行权限
chmod +x /home/rsync_wordpress_backup.sh
步骤2:添加crontab定时任务
# 编辑crontab任务
crontab -e
# 添加以下内容(每天凌晨2点执行脚本)
0 2 * * * /home/rsync_wordpress_backup.sh
crontab时间格式说明:分 时 日 月 周,0 2 * * * 表示“每天凌晨2点0分执行”。
步骤3:查看定时任务和日志
# 查看crontab任务列表
crontab -l
# 查看同步日志(排查同步是否成功)
cat /var/log/rsync_backup_20260427.log
七、常见问题排查:新手必看(避坑指南)
使用rsync时,难免会遇到报错,以下是最常见的5个问题及解决方案,结合报错信息快速排查:
问题1:rsync: connection unexpectedly closed (0 bytes received so far) (sender)
报错原因:远程服务器SSH端口错误、网络不通、rsync守护进程未启动。
解决方案:
- 检查远程服务器IP、SSH端口是否正确(如 -e “ssh -p 2222″);
- 测试网络连通性:ping 192.168.1.100;
- 若使用rsync守护进程,检查进程是否启动:systemctl status rsyncd。
问题2:rsync: mkstemp “/path/to/file” failed: Permission denied (13)
报错原因:目标路径权限不足,rsync没有写入权限。
解决方案:
- 查看目标路径权限:ls -ld /backup/wordpress;
- 给目标路径添加写入权限:chmod 775 /backup/wordpress(或chown -R root:root /backup/wordpress);
- 若使用rsync守护进程,检查配置文件中uid、gid是否有目标路径的权限。
问题3:rsync: (standard input): binary file matches
报错原因:同步的文件中包含二进制/不可见字符,rsync将其识别为二进制文件,拒绝正常同步。
解决方案:添加 -a 参数(强制将文件当作文本处理),修改命令:
rsync -aavzP /home/wordpress/ root@192.168.1.100:/backup/wordpress
问题4:同步后文件权限异常(如网站无法访问)
报错原因:未使用 -a 选项,导致文件权限、所有者未保留,WordPress站点需要特定权限(如www-data)。
解决方案:同步时必须添加 -a 选项,保留文件属性;若权限仍异常,同步后执行:
chown -R www-data:www-data /home/wordpress # 适配WordPress权限
问题5:–delete 选项误删文件
报错原因:使用 –delete 选项时,源路径末尾漏加“/”,导致目标路径被误删。
解决方案:
- 使用 –delete 前,务必先执行 -n 模拟同步(rsync -av –delete -n 源路径 目标路径),确认无误后再执行;
- 牢记源路径末尾“/”的差异,避免误操作。
八、总结:rsync 核心用法回顾
rsync的核心价值是“增量同步”,无论是本地备份、远程同步,还是WordPress站点备份,掌握以下几点,就能轻松应对:
- 基础语法:
rsync [选项] 源路径 目标路径,牢记源路径末尾“/”的差异; - 常用选项:-av(本地同步)、-avzP(远程同步)、–delete(完全同步)、-n(模拟同步);
- 远程同步:SSH协议(适合少量客户端)、rsync守护进程(适合多客户端);
- 定时同步:结合crontab+脚本,实现无人值守备份;
- 避坑重点:权限问题、–delete慎用、二进制文件添加 -a 参数。
rsync的功能远不止这些,还有更高级的用法(如过滤规则、批量同步),但对于新手和大部分运维场景,本文内容已经足够覆盖。如果在使用过程中遇到其他问题,欢迎在评论区留言交流~
提示:本文所有命令均基于CentOS 7/8、Ubuntu 20.04测试通过,不同系统可能略有差异,可根据实际系统调整。