Linux rsync 操作详解:从入门到实战,小白也能轻松上手

在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站点备份,掌握以下几点,就能轻松应对:

  1. 基础语法:rsync [选项] 源路径 目标路径,牢记源路径末尾“/”的差异;
  2. 常用选项:-av(本地同步)、-avzP(远程同步)、–delete(完全同步)、-n(模拟同步);
  3. 远程同步:SSH协议(适合少量客户端)、rsync守护进程(适合多客户端);
  4. 定时同步:结合crontab+脚本,实现无人值守备份;
  5. 避坑重点:权限问题、–delete慎用、二进制文件添加 -a 参数。

rsync的功能远不止这些,还有更高级的用法(如过滤规则、批量同步),但对于新手和大部分运维场景,本文内容已经足够覆盖。如果在使用过程中遇到其他问题,欢迎在评论区留言交流~

提示:本文所有命令均基于CentOS 7/8、Ubuntu 20.04测试通过,不同系统可能略有差异,可根据实际系统调整。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇