Rsync 命令的使用详解
2024-08-23T16:23:20+08:00 | 3 minutes read | Update at 2024-08-23T16:23:20+08:00
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
主要是 rsync
的 src
目录也有此类注意点: 对 src
和 src/
的处理是完全不同的。
基本使用
将 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
选项将会比对 src
和 dest
,删除 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