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 就可以方便地同步远程主机上的文件或目录到本地,以及将本地文件或目录同步到远程。

相关推荐
码农小韩1 天前
基于Linux的C++学习——指针
linux·开发语言·c++·学习·算法
wdfk_prog1 天前
[Linux]学习笔记系列 -- [fs]seq_file
linux·笔记·学习
Jay Chou why did1 天前
wsl安装完无法进入wsl
linux
石头5301 天前
Rocky Linux 9.6 docker k8s v1.23.17 kubeadm 高可用部署文档
linux
松涛和鸣1 天前
49、智能电源箱项目技术栈解析
服务器·c语言·开发语言·http·html·php
凉、介1 天前
SylixOS 中的 Unix Socket
服务器·c语言·笔记·学习·嵌入式·sylixos
RisunJan1 天前
Linux命令-ipcs命令(报告进程间通信(IPC)设施状态的实用工具)
linux·运维·服务器
春日见1 天前
控制算法:PP(纯跟踪)算法
linux·人工智能·驱动开发·算法·机器学习
HABuo1 天前
【Linux进程(四)】进程切换&环境变量深入剖析
linux·运维·服务器·c语言·c++·ubuntu·centos