Rsync 命令的使用详解

2024-08-23T16:23:20+08:00 | 3 minutes read | Update at 2024-08-23T16:23:20+08:00

@ sqrtcat

Rsync(remote synchronize)是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机间的文件。Rsync 使用的 Rsync算法 来使本地和远 程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

使用场景

当你需要将目录备份至本机/远端主机时,可以很简单的使用 rsync 命令实现。

复习 cp 命令

# 如果 bar 不存在 则创建一个名为 bar 的 foo 副本
# 如果 bar 已存在 则 foo > bar/foo
cp -r foo bar
cp -r foo/ bar

# 但如果是 foo/* 则 bar 必须已存在 并将 foo/* > bar
cp -r foo/* bar

这里提及 cp 主要是 rsyncsrc 目录也有此类注意点: 对 srcsrc/ 的处理是完全不同的。

基本使用

将 src 同步至 dest 中 src > dest/src

rsync -avzH ./src ./dest

将 src 下的文件同步至 dest 中 src/* > dest

rsync -avzH ./src/ ./dest

使用 ssh 认证同步至远程主机

rsync -avzH ./src/ user@host:/home/user/dest

指定远程主机的ssh端口号

rsync -avzH -e "ssh -p remoteSSHPort" ./src/ user@host:/home/user/dest

以上示例只是将 src 复制到 dest,如果我们想保证二者的一致性,可以使用 --delete 类的选项加持。

delete 选项

--delete 选项将会比对 srcdest,删除 src中不存在dest中存在 的多余文件。相关的还有: --delete-before: 先清空 dest 再全量 cp src 中的内容 --delete-after: 先全量 cp src 中的内容,再比对 dest 中的多余文件并删除 --delete-excluded: 删除 dest--exclude 声明的文件

# 实时比较 增量同步 删除 dest 中的多余文件 增量同步最佳方案
rsync -avzH ./src/ ./dest --delete

# 先清空 dest 再从 src 中全量复制
# 会导致 dest 中一段时间内没文件 网站同步慎用
rsync -avzH ./src/ ./dest --delete-before

# 先同步 再比较 删除 dest 中有但 src 中没有的
rsync -avzH ./src/ ./dest --delete-after

# 同步后会删除 --exclude 中声明的文件
rsync -avzH ./src/ ./dest --delete-excluded

exclude 排除文件

# exclude 的工作目录是 src 如下会将 src/runtime src/logs 排除同步
rsync -avz --delete -P \
	--exclude "runtime" --exclude "logs" \
	./src/ ./dest

其他可选项

-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD 
-v, --verbose 详细模式输出 
-p, --perms 保持文件权限 
-g, --group 保持文件属组信息
-o, --owner 保持文件属主信息 
-r, --recursive 对子目录以递归模式处理。同步目录的时候要加上这个参数
-l, --links 保留软链结,加上这个参数,同步过来的文件会保持之前的软链接属性不变
-H, --hard-links 保留硬链结 
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步 -e "ssh -p ${port}"
-z, --compress 对备份的文件在传输时进行压缩处理
--stats 给出某些文件的传输状态
--progress -P 打印同步的过程
--timeout=TIME 同步过程中,IP超时时间,单位为秒
--delete 删除那些目标目录中有而源目录中没有的多余文件。这个是rsync做增量方式的全备份的最佳选择方案!
--delete-before 接受者在输出之前进行删除操作。即先将目标目录中文件全部删除,再将源目录文件拷贝过去。这是rsync保持目标目录跟源目录一致的方案!
--delete-after 在同步操作之后做比较,删除那些目标目录中有而源目录中没有的多余文件 
--delete-excluded 删除目标目录中那些被该选项指定排除的文件
--ignore-errors 即使出现IO错误也进行删除,忽略错误
--exclude 指定同步时需要过滤掉的文件或子目录(即不需要同步过去的),后面直接跟不需要同步的单个文件名或子目录(不需要跟路径),过滤多个文件或子目录,就使用多个--exclude 
--exclude-from 指定同步时需要过滤掉的文件或子目录,后面跟文件(比如/root/exclue.txt),然后将不需要同步的文件和子目录放到/root/exclue.txt下。
--version 打印版本信息 
--port=PORT 指定其他的rsync服务端口 
--log-format=formAT 指定日志文件格式 
--password-file=FILE 从FILE中得到密码 
--bwlimit=KBPS 限制I/O带宽,KBytes per second

© 2024 - 2025 sqrtcat 的博客

🌱 Powered by sqrtcat

关于我

资深云程序员,在线支持技术的讨论、攻坚、架构等高级话题,线下暂提供初级技术支持。 在线接单:App / 小程序 / WordPress / 商城 / 预约 / 企业站 / 外贸站 / MES系统 / SEO优化

wx: bigcat582

Search

如何开启检索功能,只需创建 search 文档即可。

hugo new search/_index.md