Linux基础 -- 文件同步之 rsync 命令的使用

rsync 命令的作用与用法

rsync 是 Linux 系统中常用的文件同步和传输工具。它可以高效地复制和同步文件及目录,支持远程和本地之间的文件传输。rsync 使用增量同步方式,只传输源文件中与目标文件不同的数据,从而提高传输效率。

主要功能

  • 同步文件和目录:将文件和目录从一个位置复制到另一个位置,包括本地和远程之间的同步。
  • 增量备份:仅传输变化的数据,减少带宽和时间消耗。
  • 保持文件属性:可以保持文件的权限、时间戳、符号链接等属性。

基本用法

rsync 的基本语法如下:

bash 复制代码
rsync [选项] 源路径 目标路径

例如,将目录 source_dir 同步到 destination_dir

bash 复制代码
rsync -av source_dir/ destination_dir/

在这个命令中:

  • -a:归档模式,保留文件属性,并递归同步。
  • -v:显示详细输出信息。
  • source_dir/:表示同步目录下的所有内容(注意尾部斜杠的作用)。
  • destination_dir/:目标目录。

常用选项

  • -a, --archive:归档模式,相当于 -rlptgoD,保留文件的权限、符号链接、时间戳等属性。
  • -v, --verbose:显示详细的传输信息。
  • -z, --compress:在传输过程中压缩数据,减少带宽占用。
  • -r, --recursive:递归同步目录及子目录。
  • -P:显示进度,并可以断点续传,等同于 --progress --partial
  • --delete:在目标路径中删除源路径不存在的文件,使目标与源保持一致。
  • -e ssh:使用 SSH 作为远程传输协议,这对于安全的远程同步非常有用。

使用实例

1. 本地同步文件

bash 复制代码
rsync -av /home/user/documents/ /backup/documents/

/home/user/documents/ 中的内容同步到 /backup/documents/

2. 通过 SSH 远程同步

bash 复制代码
rsync -av -e ssh /home/user/documents/ user@remote_host:/backup/documents/

将本地 /home/user/documents/ 同步到远程服务器 remote_host/backup/documents/ 目录。

3. 同步并删除目标中多余的文件

bash 复制代码
rsync -av --delete /home/user/documents/ /backup/documents/

使 /backup/documents//home/user/documents/ 完全一致,删除 /backup/documents/ 中多余的文件。

4. 仅同步更改的文件

bash 复制代码
rsync -av --ignore-existing /home/user/documents/ /backup/documents/

只同步在目标路径中不存在的文件。

使用自定义 SSH 端口

如果远程主机的 SSH 端口不是默认的 22,可以通过 -e 选项指定端口号。例如,远程端口是 2222

bash 复制代码
rsync -av -e 'ssh -p 2222' /home/user/documents/ user@remote_host:/backup/documents/

使用 SSH Token 连接

如果使用 SSH Token 进行连接,可以通过 -e 选项指定使用 Token 文件。例如,Token 文件路径为 ~/.ssh/id_token

bash 复制代码
rsync -av -e 'ssh -i ~/.ssh/id_token' /home/user/documents/ user@remote_host:/backup/documents/

从远程主机同步文件到本地

如果需要将远程主机的目录同步到本地,使用如下命令:

bash 复制代码
rsync -avz user@remote_host:/远程路径/ 本地路径/

例如,将远程服务器 remote_host 上的 /home/user/documents/ 目录同步到本地的 /backup/documents/

bash 复制代码
rsync -avz user@remote_host:/home/user/documents/ /backup/documents/

将本地文件同步到远程主机

如果需要将本地目录同步到远程主机,可以使用如下命令:

bash 复制代码
rsync -avz 本地路径/ user@remote_host:/远程路径/

例如,将本地目录 /home/user/documents/ 同步到远程服务器 remote_host/backup/documents/ 目录:

bash 复制代码
rsync -avz /home/user/documents/ user@remote_host:/backup/documents/

注意事项

  • 权限问题 :可能需要使用 sudo 或者以合适的权限来执行命令,以确保文件的所有权和权限能够正确同步。
  • 尾部斜杠 :注意源路径和目标路径的尾部斜杠是否存在。如果在源路径结尾加上斜杠(如 /home/user/documents/),表示只同步目录内的内容,而不包含该目录本身;不加斜杠则会包含整个目录一起同步。

这样使用 rsync 就可以方便地同步远程主机上的文件或目录到本地,以及将本地文件或目录同步到远程。

相关推荐
yunfanleo5 分钟前
docker run m3e 配置网络,自动重启,GPU等 配置渠道要点
linux·运维·docker
m51275 分钟前
LinuxC语言
java·服务器·前端
运维-大白同学28 分钟前
将django+vue项目发布部署到服务器
服务器·vue.js·django
糖豆豆今天也要努力鸭35 分钟前
torch.__version__的torch版本和conda list的torch版本不一致
linux·pytorch·python·深度学习·conda·torch
烦躁的大鼻嘎44 分钟前
【Linux】深入理解GCC/G++编译流程及库文件管理
linux·运维·服务器
乐大师44 分钟前
Deepin登录后提示“解锁登陆密钥环里的密码不匹配”
运维·服务器
ac.char1 小时前
在 Ubuntu 上安装 Yarn 环境
linux·运维·服务器·ubuntu
敲上瘾1 小时前
操作系统的理解
linux·运维·服务器·c++·大模型·操作系统·aigc
长弓聊编程1 小时前
Linux系统使用valgrind分析C++程序内存资源使用情况
linux·c++
cherub.1 小时前
深入解析信号量:定义与环形队列生产消费模型剖析
linux·c++