适合初学者的 Linux Rsync 命令示例
在这个全面的 Rsync 教程中,我们将学习有用的 Rsync 命令示例在 Linux 操作系统中复制、备份和同步文件。
1.Rsync简介
Linux 和 Unix 平台上有很多备份/文件同步工具。 Rsync被认为是最广泛使用和最值得信赖的备份工具之一。
Rsync,代表Remote Sync,是一种快速且多功能的文件复制工具。它可以通过任何远程 shell 在本地复制到/从另一台主机复制,或者复制到/从远程 rsync 守护进程复制。
Rsync是一个单向增量文件传输工具,使用delta-transfer算法。它仅传输源文件和目标文件之间的差异,从而大大减少了通过网络发送的数据量。
它被单个用户以及数十万个组织广泛使用,从小型到企业级,用于备份和镜像。
许多个人用户还使用 Rsync 作为日常使用的改进的复制命令。
Rsync 是至今仍在使用的最古老的开源程序之一。该程序于 1996 年 6 月首次公布,最初由 Andrew Tridgell 和 Paul Mackerras 开发。目前由 Wayne Davison 维护。
Rsync 是一个跨平台、开源备份应用程序,支持 Linux、Unix 发行版,例如 FreeBSD、NetBSD、OpenBSD、macOS 和 Windows(通过 Cygwin)。
Rsync 是用C 编程语言编写的单线程应用程序,并且在 GPL 下免费提供。
1.1. Rsync 功能
与同类产品相比,Rsync 具有许多功能。以下是 Rsync 的一些值得注意的功能:
- Rsync 可以更新整个目录树和文件系统。
- 它可以保留符号链接、硬链接、文件所有权、权限、设备和时间。
- 内部流水线减少了多个文件的延迟。
- 可以使用 rsh、ssh 或直接套接字作为传输。
- 支持匿名 rsync,非常适合镜像。
2.在Linux中安装rsync
Rsync 预装在许多 Linux 和类 Unix 操作系统中。以防万一它在您的 Linux 系统上不可用,您可以使用发行版的默认包管理器安装 Rsync。
大多数 Linux 发行版的默认存储库中都提供 Rsync。
在 Alpine Linux 上安装 Rsync:
sudo apk add rsync在 Arch Linux 上安装 Rsync:
sudo pacman -S rsync在 Fedora、CentOS、RHEL、AlmaLinux、Rocky Linux 中安装 Rsync:
sudo dnf install rsync
在 Debian、Ubuntu、Linux Mint、Pop!_OS 上安装 Rsync:
sudo apt install rsync在 openSUSE 上安装 Rsync:
sudo zypper install rsync在 Solus 上安装 Rsync:
sudo eopkg install rsync注意:如果要在两个系统之间同步文件,则必须在两个系统上安装 Rsync。
3.rsync命令语法
与cp、rcp和scp命令类似,rsync也需要指定源和目标,其中至少 必须是本地人。
注意: Rsync 不支持在两个远程主机之间复制文件。
Rsync的一般语法如下:
本地到本地:
rsync [OPTION…] SRC… [DEST]本地到远程:
rsync [OPTION…] SRC… [USER@]HOST:DEST远程到本地:
rsync [OPTION…] [USER@]HOST:SRC… [DEST]这里,
OPTION- Rsync 选项列表SRC- 源文件或目录DEST- 目标文件或目录USER@HOST- 远程用户名和主机名或 IP 地址
3.1. Rsync 选项
Rsync 有很多选项。最常用的 Rsync 选项如下:
-a:存档模式。归档模式指示 Rsync 执行归档操作,并递归复制目录及其子目录,保留所有文件属性,例如文件权限、所有权、符号链接和时间戳。它相当于 -rlptgoD 选项。-v:详细模式。-u- 跳过接收端较新的文件。有助于避免覆盖目标文件。-z:压缩文件。-r:递归复制整个目录及其内容。使用-a标志时可以排除它。-P:文件传输过程中显示进度条。此选项还用于保留部分传输的文件。--delete:从目标目录中删除无关文件。换句话说,此选项将删除源中不可用但目标中可用的所有目录和文件。同步文件和目录时很有用。-x:限制 rsync 在文件系统边界内同步数据。它指示 Rsync 不要跨越文件系统边界。如果您在主目录中安装了任何文件系统,则在同步操作期间将跳过该文件系统。-h:以人类可读的格式输出数字。
如前所述,Rsync 有更多选项。但上述内容对于日常操作来说基本上已经足够了。
4. 对初学者有用的 Rsync 命令示例
使用 Rsync,我们可以轻松地传输单个文件或与本地系统中的模式匹配的多个文件,也可以将文件传输到远程系统或从远程系统传输文件。
以下是最常用的 Rsync 命令列表,其中包含适合初学者和中级用户的示例。
1.本地复制或同步文件
Rsync 被广泛用作 cp 命令的替代方法,用于从一个位置备份和复制文件。
要使用 Rsync 备份或复制文件,例如 ostechnix.txt,只需执行以下操作:
rsync -av ostechnix.txt ostechnix-backup.txt此命令将 ostechnix.txt 文件的内容以 [a]rchive 模式复制到当前目录中的 ostechnix-backup.txt。这主要用于在对配置文件进行任何更改之前备份配置文件。
示例输出:
sending incremental file list
ostechnix.txt
sent 138 bytes received 35 bytes 346.00 bytes/sec
total size is 30 speedup is 0.17使用 rsync 在本地复制或同步文件
如果您想将备份文件保存在不同的位置,只需指定目标路径,如下所示:
rsync -av ostechnix.txt mybackup/ostechnix-backup.txt这会将给定文件复制到 mybackup 目录。
要复制多个文件,请用空格分隔指定它们,如下所示:
rsync -av file1 file2 file3 mybackup/2. 将文件复制或同步到外部驱动器
您还可以将文件复制到不同的分区甚至不同的驱动器。
例如,我使用以下命令将 ostechnix.txt 文件复制到安装在 /media/sk/ 位置的外部 Seagate 硬盘:
rsync -auv ostechnix.txt /media/sk/seagate/myfiles这里,-u 开关用于跳过接收器上较新的文件,-v 用于打印详细输出。
注意:要查找外部驱动器的装载点,请使用lsblk 命令。
$ lsblk
sdb 8:16 0 931.5G 0 disk
└─sdb1 8:17 0 931.5G 0 part /media/sk/seagate3.本地复制或同步目录
要使用 Rsync 将目录(包括其子目录和文件)复制到另一个目录,请使用 -a 标志,如下所示:
rsync -av dir1/ dir2如果目标目录不存在,Rsync 会自动创建。
注意:这里,尾部斜杠 (/) 起着重要作用。
如果您想将目录内容(但不是目录本身)传输到另一个目录,请确保您已在源目录末尾指定了尾随/,如下所示:
rsync -av path/to/source_directory/ path/to/destination_directory源目录上的尾部斜杠可避免在目标中创建额外的目录级别。
要将目录本身及其所有子目录从一个目录传输到另一个目录:
rsync -av path/to/source_directory path/to/destination_directory请注意,我没有在上述命令中的源目录末尾添加尾随/。这会将整个源目录复制到目标。
要复制多个目录,请用空格分隔指定它们,如下所示:
rsync -av dir1/ dir2/ dir3使用 rsync 在本地复制或同步目录
这会将 dir1 和 dir2 的内容复制到 dir3 目录。
当您第一次运行 rsync 时,将所有文件从源复制到目标将需要一段时间,具体取决于文件数量和文件大小。
由于Rsync是增量备份工具,因此它只会在后续时间中将文件更改从源位置复制到目标位置。
如果已经复制了任何文件,它将简单地忽略它们。所以在接下来的时间里文件传输速度总是会更快。
4. 将文件从本地系统同步或传输到远程系统
注意:为了在两个系统之间同步文件,应在两个系统上安装 Rsync。此外,两个系统都应该能够通过 SSH 进行通信,并且目标目录必须具有读写权限。
要将文件从本地系统复制或同步到网络上的远程系统,命令为:
rsync path/to/local_file remote_host:path/to/remote_directory示例:
rsync -av file1 ostechnix@192.168.122.25:/home/ostechnix/data示例输出:
ostechnix@192.168.122.25's password:
sending incremental file list
file1
sent 129 bytes received 35 bytes 46.86 bytes/sec
total size is 30 speedup is 0.18使用 rsync 将文件从本地系统复制到远程系统
这里,
-a:存档模式以保留属性。file1:源文件。ostechnix@192.168.122.25:远程系统的用户名和IP地址。/home/ostechnix/data:远程位置。
我们还可以组合多个 Rsync 选项来执行特定任务。
以下命令以 [a]rchive(以保留属性)和压缩 ([z]ipped) 模式使用 [v ]erbose 输出和 [h]人类可读的格式。
rsync -azvh file1 ostechnix@192.168.122.25:/home/ostechnix/data5. 将文件从远程系统同步或传输到本地系统
要将文件从远程系统复制或同步到本地系统,只需颠倒上述命令中的源路径和目标路径即可:
rsync -a ostechnix@192.168.122.25:/home/ostechnix/data/file1 Downloads/file1此命令将文件(例如 /home/ostechnix/data/file1)从远程系统传输到本地系统的 Downloads 目录。
6. 将目录及其所有内容从本地系统同步或传输到远程系统
要复制或同步目录及其所有内容(例如子目录和文件),我们可以使用 -r 标志:
rsync -r path/to/local_directory remote_host:path/to/remote_directory示例:
rsync -rv dir1/ ostechnix@192.168.122.25:/home/ostechnix/data使用 rsync 将目录从本地系统复制到远程系统
这里,-r用于递归复制目录及其内容。
7. 将目录及其所有内容从远程同步或传输到本地系统
要将目录及其内容从远程系统复制或同步到本地系统,请使用以下命令:
rsync -r remote_host:path/to/remote_directory/ path/to/local_directory示例:
rsync -rv ostechnix@192.168.122.25:/home/ostechnix/data/ dir1/使用 rsync 将目录从远程系统复制到本地系统
此命令将 data/ 目录的内容从远程系统复制到名为 dir1/ 的本地目录。
8. 递归同步或传输目录,保留属性、软链接并忽略已传输的文件
如前所述,我们可以在单个命令中组合多个 Rsync 开关来执行特定任务。
例如,要以递归方式复制或同步目录 [r],在 [a]rchive 模式下保留属性,解析包含的软 [l]inks , [v]erbose 模式,并忽略已复制的文件 [u]除非较新,请使用-rauvL 标志如下:
rsync -rauvL dir1/ ostechnix@192.168.122.25:/home/ostechnix/data9.删除不在源目录下的文件
有时,您可能希望保持源目录和目标目录同步。含义 - 您希望双方保持相同的内容。在这种情况下,您可以使用 --delete 开关。
使用 --delete 标志时应该非常小心。因为,Rsync 会删除所有在源中不可用但仅在目标中可用的目录和文件。
让我们看一个例子。
这是我的目标目录的当前内容:
ls data/
nettle-3.4.1rc1-3.fc31.x86_64.rpm usr我将在目标位置创建一个名为 ostechnix 的新目录和一个名为 file1 的新文件。
mkdir data/ostechnix
touch data/file1让我们检查它们是否已创建:
ls data/
file1 nettle-3.4.1rc1-3.fc31.x86_64.rpm ostechnix usr请记住,新创建的名为 ostechnix 的目录和新文件 file1 在源目录中不可用。
现在,我在本地系统中使用 --delete 开关运行以下 Rsync 命令(源代码):
rsync -av --delete dir1/ ostechnix@192.168.122.25:/home/ostechnix/data示例输出:
sending incremental file list
deleting ostechnix/
deleting file1
./
sent 712 bytes received 54 bytes 218.86 bytes/sec
total size is 1,400,477 speedup is 1,828.30正如您在上面的输出中看到的,Rsync 删除了新的目录和文件。
现在让我们进入目标系统检查它们是否被删除:
$ ls data/
nettle-3.4.1rc1-3.fc31.x86_64.rpm usr使用 rsync 删除不在源目录中的文件
他们走了!
我再次警告你!使用 --delete 开关时必须非常小心。您可能会意外删除任何重要文件。
10.传输成功后删除源文件
这与之前的命令有些相似。但在这种方法中,我们在成功同步或传输到目标系统后删除源文件。
要在使用 Rsync 成功传输后删除源文件,请使用 --remove-source-files 开关。
rsync -av --remove-source-files ostechnix.txt ostechnix@192.168.122.25:/home/ostechnix/data示例输出:
sending incremental file list
ostechnix.txt
sent 137 bytes received 43 bytes 51.43 bytes/sec
total size is 30 speedup is 0.17您还可以在成功传输后删除源目录中的文件:
rsync -arv --remove-source-files dir1/ ostechnix@192.168.122.25:/home/ostechnix/data请注意,这只会从源目录中删除文件,而不是源目录本身。成功传输后,您仍然会有一个空的源目录。
11.传输文件时显示进度条
默认情况下,Rsync 在传输文件时不会显示任何进度条。转移成功后只会显示摘要。如果您想知道幕后发生了什么,可以使用 -P 开关显示进度条。
以下命令将带有 [P]rogress bar 的 dir1/ 目录传输到远程系统:
rsync -avP dir1/ ostechnix@192.168.122.25:/home/ostechnix/data示例输出:
sending incremental file list
./
video.mp4
839,974,565 100% 43.78MB/s 0:00:18 (xfr#1, to-chk=13/15)
video.srt
127,340 100% 405.07kB/s 0:00:00 (xfr#2, to-chk=12/15)
sent 840,307,476 bytes received 69 bytes 39,084,071.86 bytes/sec
total size is 840,101,905 speedup is 1.00使用 rsync 传输文件时显示进度条
当您传输大量数据时这将很有用。您可以跟踪文件复制进度,了解当前正在传输的数据量以及传输文件所用的时间。
-P 标志对于恢复部分下载或传输的文件也很有用。
您还可以使用--info=progress2开关来显示全局进度,相当于-P。
rsync -av --info=progress2 dir1/ ostechnix@192.168.122.25:/home/ostechnix/data12.通过SSH同步或传输文件
较新版本的 Rsync 配置为使用 ssh 作为默认远程 shell,因此您无需指定任何额外选项即可通过 SSH 同步文件。
以防万一,如果您使用的是较旧的 Rsync 版本,您可以使用 -e ssh 标志通过 SSH 在本地系统和远程系统之间复制或同步文件,如下所示。
rsync -e ssh file.json ostechnix@192.168.122.25:/home/ostechnix/data如果您还想删除源上不存在的文件,请在上述命令中添加 --delete 开关:
$rsync -e ssh --删除 file.json ostechnix@192.168.122.25:/home/ostechnix/data
13. 使用不同端口通过 SSH 同步或传输文件
为了安全起见,您可能更改了默认 SSH 端口。
在这种情况下,您需要明确提及 SSH 端口,如下所示:
rsync -e 'ssh -p 2222' -P file.json ostechnix@192.168.122.25:/home/ostechnix/data这将使用自定义端口 (2222) 和进度条通过 SSH 复制或同步文件。
14. 设置传输的最大和最小文件大小
当您传输大量文件时,您可能不希望传输大于或小于特定大小的文件。 Rsync 有两个专门用于此目的的开关。
如果您不想传输大于给定大小的任何文件,可以使用 --max-size 标志。
例如,以下命令将避免传输任何大小超过 100 MB 的文件:
rsync -av -P --max-size=100M dir1/ ostechnix@192.168.122.25:/home/ostechnix/data您可以使用 B(字节)、K(千)、M(兆)、G(千兆)、T(万亿)或 P(千万)来指定大小。
同样,如果您不想传输任何小于给定大小的文件,请使用 --min-size 标志:
rsync -av -P --min-size=100M dir1/ ostechnix@192.168.122.25:/home/ostechnix/data15. 忽略同步中的空目录
您可能在源位置中有空目录。如果您想从同步列表中排除一些无用的空目录,请使用 --prune-empty-dirs 或 -m 标志。
rsync -av -m dir1/ ostechnix@192.168.122.25:/home/ostechnix/data此命令将从 dir1/ 源目录中删除所有空目录,包括没有非目录子目录的嵌套目录。
当发送 rsync 使用包含/排除/过滤规则递归扫描文件层次结构时,这对于避免创建一堆无用的目录很有用。
16.设置带宽限制
我们还可以使用 --bwlimit 选项定义通过套接字发送的数据的最大数据传输速率。
以下命令以每秒 10MB 的速度传输文件。
$rsync -av --bwlimit=10M dir1/ostechnix@192.168.122.25:/home/ostechnix/data
示例输出:
sending incremental file list
./
video.mp4
usr/
usr/lib/
usr/lib/.build-id/
usr/share/
usr/share/doc/
usr/share/licenses/
sent 901,983,468 bytes received 72 bytes 10,078,028.38 bytes/sec
total size is 901,770,618 speedup is 1.00您可以指定 K 表示千字节。如果未指定后缀,则数据传输速率值将假定以 1024 字节 为单位。
17.一定时间后停止复制文件
有一个名为 --stop-after 的选项,它指示 rsync 在指定的分钟数过去后停止复制文件。
以下命令告诉 Rsync 在15 分钟后停止复制:
rsync -av --stop-after=15 dir1/ dir218.在准确的时间停止复制文件
您甚至可以使用 --stop-at 选项在指定时间停止复制文件。您需要以年-月-日Thour:分钟格式指定时间。
示例:
rsync -av --stop-at=2021-07-28T23:59 dir1/ dir219. 包含或排除文件和目录
Rsync 有两个选项可以在同步中包含或排除某些文件或目录。
以下命令包括所有以 f 开头的命令,并从同步中排除所有其他命令。
rsync -av -P --include 'f*' --exclude '*' dir1/ ostechnix@192.168.122.25:/home/ostechnix/data使用 rsync 在同步中包含或排除文件和目录
如果您只想从复制中排除特定类型的文件(例如 txt 文件),请运行:
rsync -avP --exclude '*.txt' dir1/ ostechnix@192.168.122.25:/home/ostechnix/data20.显示源文件和目标文件之间的差异
要显示传输文件时源和目标之间是否存在差异,可以使用 -i 标志。
rsync -avi dir1/ ostechnix@192.168.122.25:/home/ostechnix/data示例输出:
ostechnix@192.168.122.25's password:
sending incremental file list
.d..t...... ./
<f+++++++++ file1.txt
sent 270 bytes received 40 bytes 88.57 bytes/sec
total size is 901,770,621 speedup is 2,908,937.49正如您在上面的输出中看到的,目标中缺少 file1.txt。
上述输出中的字母 f 代表文件。
输出中其他可能的字母可能是:
d- 显示目标文件有问题。t- 显示时间戳已更改。s- 显示大小已更改。
21.与cron作业自动同步
您可以使用cron调度程序来安排在特定日期的特定时间传输文件。
使用命令编辑当前用户的 cron 作业
crontab -e在文件中添加 rsync。例如,要每天凌晨 3 点运行备份,请使用以下行:
0 3 * * * rsync -av dir1/ ostechnix@192.168.122.25:/home/ostechnix/data根据您的要求,您可以每天、每周或每月安排 Rsycn 命令。
如果您不熟悉 Cron 作业,我们整理了一系列有用的 cron 作业示例来在 Linux 中安排任务。有关 cron 使用的更多详细信息,请参阅以下指南。
- Cron 作业初学者指南
22. 使用 Rsync 执行试运行
Rsync 是一个强大的工具。您应该小心,尤其是在使用 --delete 标志时。您可能会意外删除重要文件。
为了避免这种情况,您可以使用 --dry-run 选项,该选项显示运行命令时会发生什么,而不实际对文件进行任何更改。
rsync -av --delete --dry-run dir1/ ostechnix@192.168.122.25:/home/ostechnix/data这使得 rsync 执行不进行任何更改的试运行,并产生与实际运行基本相同的输出。
示例输出:
ostechnix@192.168.122.25's password:
sending incremental file list
deleting file1.txt
./
sent 214 bytes received 34 bytes 70.86 bytes/sec
total size is 901,770,621 speedup is 3,636,171.86 (DRY RUN)它最常与 -v 和 -i 选项结合使用,以在实际运行 rsync 命令之前查看 rsync 命令将要执行的操作。
有关更多详细信息,请查看 Rsync 手册页。
man rsync5. Rsync 图形前端
如果您是初学者,您可能会发现很难理解所有 Rsync 选项和标志。幸运的是,有一些 Rsync 图形前端工具可用。此类工具之一是Grsync。
Grsync 是 Rsync 的简单图形用户界面。您不必记住任何 Rsync 命令及其选项。您可以通过易于使用的 GUI 完成所有操作。
要了解如何安装和使用 Grsync 轻松备份和同步文件,请参考以下指南:
- Grsync - Rsync 的简单图形前端
六,结论
在这份详细的 Rsync 指南中,我们通过 Linux 中的示例讨论了最常用的 Rsync 命令。还有很多内容需要介绍,但我想这 20 多个 Rsync 命令示例足以学习 Rsync 的用法。
在我看来,Rsync 是适用于 Linux 和类 Unix 操作系统的最佳免费开源备份应用程序之一。您必须使用这个有用的程序来备份您无法承受丢失的数据。
资源:
- Rsync网站







