如何在 Linux 中使用 Rsync 命令:16 个实际示例

同步远程同步) 是最常用的命令以及本地 Linux/Unix 系统。

在的帮助下同步命令,您可以跨目录、磁盘和网络远程和本地复制和同步数据,执行数据备份,以及。

这篇文章解释了16的基本和高级用途同步命令来远程和本地传输文件基于Linux机器。你不需要成为一个用户运行同步命令。

它具有多种优势,包括:

  • 高效的文件传输– rsync使用增量传输算法,这意味着它只传输源文件和目标文件之间的差异,这显着减少了传输的数据量,使其能够高效地同步大文件或目录。
  • 远程文件同步– rsync 支持通过 SSH 进行本地和远程文件传输,允许本地和远程系统之间的同步或跨多台机器的镜像目录。
  • 增量备份– rsync 非常适合增量备份,因为它通过仅传输新的或修改的文件来有效地创建和更新备份。
  • 保留文件权限– rsync 可以保留各种文件属性,例如权限、所有权、时间戳和符号链接,这确保复制的文件在目标上保留其原始特征。
  • 带宽控制– rsync 允许您在文件传输过程中,因为它在两端发送和接收数据时使用压缩和解压缩方法。
  • 快点– rsync 可以比用于传输文件,特别是在同步大型目录或处理已部分传输或存在于目标上的文件时。

Rsync 命令语法

同步命令遵循以下语法:

# rsync [OPTIONS] SOURCE DESTINATION

以下是对使用的不同组件和选项的解释同步命令:

  • -v– 详细输出,显示有关传输的详细信息。
  • -r– 递归复制数据(但在传输数据时不保留时间戳和权限。
  • -a– 存档模式,允许递归复制文件,并且还保留符号链接、文件权限、用户和组所有权以及时间戳。
  • -z– 在传输过程中压缩文件以减少网络使用。
  • -h– 人类可读,以人类可读格式输出数字。
  • -P– 显示传输过程中的进度。
  • SOURCE– 指定要传输的源文件或目录,可以是本地或远程位置。
  • DESTINATION– 指定将复制文件或目录的目标路径。与源类似,它可以是本地路径或远程位置。

在Linux系统中安装Rsync

我们可以安装同步根据您的 Linux 发行版,在以下包管理器的帮助下安装包。

$ sudo apt install rsync         [On Debian, Ubuntu and Mint]
$ sudo yum install rsync         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
$ sudo emerge -a sys-apps/rsync  [On Gentoo Linux]
$ sudo apk add rsync            [On Alpine Linux]
$ sudo pacman -S rsync           [On Arch Linux]
$ sudo zypper install rsync      [On OpenSUSE]    

1.本地复制/同步文件

要在本地复制或同步文件,您可以使用以下命令将本地计算机上的单个文件从一个位置同步到另一个位置。

在此示例中,文件名备份.tar需要复制或同步到/tmp/备份/文件夹。

[root@tecmint]# rsync -zvh backup.tar.gz /tmp/backups/

created directory /tmp/backups
backup.tar.gz

sent 224.54K bytes  received 70 bytes  449.21K bytes/sec
total size is 224.40K  speedup is 1.00

在上面的示例中,您可以看到,如果目标尚不存在,rsync 将自动为目标创建一个目录。

Rsync 本地文件

2.本地复制/同步目录

以下命令会将所有文件从一个目录传输或同步到同一台计算机上的不同目录。

在这个例子中,/根/rpmpkgs包含一些 rpm 包文件,并且您希望将该目录复制到其中/tmp/备份/文件夹。

[root@tecmint]# rsync -avzh /root/rpmpkgs /tmp/backups/

sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm

sent 3.47M bytes  received 96 bytes  2.32M bytes/sec
total size is 3.74M  speedup is 1.08
Rsync 本地目录

3. 将目录从本地复制到远程服务器

要将目录从本地服务器复制到远程服务器,可以使用以下命令,该命令会将目录从本地计算机同步到远程计算机。

例如,如果您的本地计算机中有一个文件夹“rpm包” 其中包含一些转速包,如果您希望将本地目录的内容发送到远程服务器,您可以使用以下命令。

# rsync -avzh /root/rpmpkgs :/root/

The authenticity of host '192.168.0.141 (192.168.0.141)' can't be established.
ED25519 key fingerprint is SHA256:bH2tiWQn4S5o6qmZhmtXcBROV5TU5H4t2C42QDEMx1c.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.0.141' (ED25519) to the list of known hosts.
's password: 
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm

sent 3.74M bytes  received 96 bytes  439.88K bytes/sec
total size is 3.74M  speedup is 1.00
Rsync 目录远程系统

4. 将目录从远程复制到本地服务器

此命令将帮助您将远程目录同步到本地目录。在这个例子中,一个目录/根/rpmpkgs远程服务器上的文件正在被复制到您的本地计算机中/tmp/myrpms

# rsync -avzh :/root/rpmpkgs /tmp/myrpms

's password: 
receiving incremental file list
created directory /tmp/myrpms
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm

sent 104 bytes  received 3.49M bytes  997.68K bytes/sec
total size is 3.74M  speedup is 1.07
Rsync 远程目录到本地

5.通过 SSH 进行 Rsync

同步,我们可以使用对于数据传输,使用SSH协议在传输我们的数据时,您可以确保您的数据在加密的安全连接中传输,以便在通过互联网传输数据时没有人可以读取您的数据。

还有当我们使用同步我们需要提供用户/密码来完成该特定任务,因此使用SSH选项将以加密方式发送您的登录信息,以便您密码会安全的。

使用同步超过SSH,您可以使用-e选项来指定远程 shell 命令,通常是 ssh,如图所示。

# rsync [OPTIONS] -e ssh /path/to/source user@remote:/path/to/destination

6. 使用 SSH 将文件从远程服务器复制到本地服务器

要将文件从远程服务器同步到本地服务器,您可以指定协议:同步使用“-e” 选项以及您要使用的协议名称。

在此示例中,我们将使用“SSH”与“-e”选项并执行数据传输。

# rsync -avzhe ssh :/root/anaconda-ks.cfg /tmp

's password: 
receiving incremental file list
anaconda-ks.cfg

sent 43 bytes  received 1.10K bytes  325.43 bytes/sec
total size is 1.90K  speedup is 1.67
Rsync复制远程文件到本地

7. 使用 SSH 将文件从本地服务器复制到远程服务器

要使用 SSH 将文件从本地服务器同步到远程服务器,您可以利用以下命令,如下所示。

# rsync -avzhe ssh backup.tar.gz :/backups/

's password: 
sending incremental file list
created directory /backups
backup.tar.gz

sent 224.59K bytes  received 66 bytes  64.19K bytes/sec
total size is 224.40K  speedup is 1.00
Rsync复制本地文件到远程

8. 使用 Rsync 传输数据时显示进度

为了显示将数据从一台机器传输到另一台机器时的进度,我们可以使用 '--progress'选项,显示文件和完成传输的剩余时间。

# rsync -avzhe ssh --progress /root/rpmpkgs :/root/rpmpkgs

's password: 
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
          1.47M 100%   31.80MB/s    0:00:00 (xfr#1, to-chk=3/5)
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
        138.01K 100%    2.69MB/s    0:00:00 (xfr#2, to-chk=2/5)
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
          2.01M 100%   18.45MB/s    0:00:00 (xfr#3, to-chk=1/5)
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm
        120.48K 100%    1.04MB/s    0:00:00 (xfr#4, to-chk=0/5)

sent 3.74M bytes  received 96 bytes  1.50M bytes/sec
total size is 3.74M  speedup is 1.00
复制文件时的 Rsync 进度

9. 使用 Rsync 包含具有特定扩展名的文件

要在 rsync 操作期间包含特定文件或模式,您可以使用--include具有与所有文件匹配的扩展名的选项。

# rsync -avz --include='*.txt' /path/to/source/ user@remote:/path/to/destination/

在提供的示例中,rsync 将仅包含具有.txt延伸自/路径/到/源/传输期间的目录。

10. 使用 Rsync 排除具有特定扩展名的文件

同样,要在 rsync 操作期间排除特定扩展名,您可以使用--exclude带有通配符模式的选项。

# rsync -avz --exclude='*.ext' /path/to/source/ user@remote:/path/to/destination/

在提供的示例中,rsync 将排除具有指定扩展名的文件(*.ext)在传输过程中,同时包括所有其他文件和目录。

11. 使用 Rsync 包含和排除文件

要在 rsync 操作期间包含和排除特定文件或模式,您可以使用--include--exclude具有适当通配符模式的选项。

这两个选项使我们能够包括排除通过指定参数这些选项可以帮助我们指定您想要包含在同步中的文件或目录,并排除您不想传输的文件和文件夹。

在这个例子中,同步命令将仅包含以以下开头的文件和目录‘R’并排除所有其他文件和目录。

# rsync -avze ssh --include 'R*' --exclude '*' :/var/lib/rpm/ /root/rpm
Rsync 包含和排除文件

12. Rsync 中使用 –delete 选项

如果文件或目录在源中不存在,但在目标中已存在,则您可能希望在同步时删除目标中的现有文件/目录。

我们可以使用 '--delete' 选项删除源目录中不存在的文件。

源和目标是同步的。现在创建一个新文件测试.txt在目标处。

[root@tecmint:~]# cd /root/rpm/
[root@tecmint:~/rpm]# touch test.txt
[root@tecmint:~/rpm]# rsync -avz --delete :/var/lib/rpm/ /root/rpm/

's password: 
receiving incremental file list
deleting test.txt
./
.dbenv.lock
.rpm.lock
Basenames
Conflictname
Dirnames
Enhancename
Filetriggername
Group
Installtid
Name
Obsoletename
Packages
Providename
Sha1header
Sigmd5
Suggestname
Supplementname
Transfiletriggername
Triggername
__db.001
__db.002
__db.003

sent 445 bytes  received 18,543,954 bytes  2,472,586.53 bytes/sec
total size is 71,151,616  speedup is 3.84

目标有一个名为的新文件测试.txt当与源同步时–delete' 选项,它删除了文件测试.txt

Rsync 删除选项

13. 使用 Rsync 设置文件传输限制

您可以指定最大限度要传输或同步的文件大小。你可以用“--max-size”选项。在此示例中,最大文件大小为20万,因此该命令将仅传输那些等于或小于的文件20万

# rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ :/root/tmprpm

's password: 
sending incremental file list
created directory /root/tmprpm
./
.dbenv.lock
.rpm.lock
Conflictname
Enhancename
Filetriggername
Group
Installtid
Name
Obsoletename
Recommendname
Requirename
Sha1header
Sigmd5
Suggestname
Supplementname
Transfiletriggername
Triggername
__db.002

sent 129.52K bytes  received 396 bytes  28.87K bytes/sec
total size is 71.15M  speedup is 547.66
Rsync 设置最大文件传输大小

14. 传输后自动删除源文件

现在,假设您有主 Web 服务器和数据备份服务器,您创建了每日备份并将其与备份服务器同步,但现在您不想在 Web 服务器中保留备份的本地副本。

那么,您会等待传输完成,然后手动删除该本地备份文件吗?当然没有。这种自动删除可以使用 '--remove-source-files' 选项。

# rsync --remove-source-files -zvh backup.tar.gz :/tmp/backups/

's password: 
backup.tar.gz

sent 795 bytes  received 2.33K bytes  894.29 bytes/sec
total size is 267.30K  speedup is 85.40

[root@tecmint:~]# ls -l backup.tar.gz

ls: cannot access 'backup.tar.gz': No such file or directory
Rsync 传输后删除源文件

15. 使用 Rsync 进行试运行

如果您是 rsync 的新手,并且不知道您的命令到底要做什么。 Rsync 确实可能会弄乱目标文件夹中的内容,然后进行撤消可能是一项乏味的工作。

使用此选项不会对文件进行任何更改并显示命令的输出,如果输出显示与您想要的完全相同,那么您可以删除 '--dry-run' 命令中的选项并在终端上运行。

# rsync --dry-run --remove-source-files -zvh backup.tar.gz :/tmp/backups/

's password: 
backup.tar.gz

sent 50 bytes  received 19 bytes  19.71 bytes/sec
total size is 267.30K  speedup is 3,873.97 (DRY RUN)
Rsync 试运行

16. Rsync 设置带宽限制并传输文件

您可以在“将数据从一台计算机传输到另一台计算机时设置带宽限制”--bwlimit' 选项。这个选项可以帮助我们限制输入/输出带宽。

# rsync --bwlimit=100 -avzhe ssh  /var/lib/rpm/  :/root/tmprpm/
's password:
sending incremental file list
sent 324 bytes  received 12 bytes  61.09 bytes/sec
total size is 38.08M  speedup is 113347.05

另外,默认情况下 rsync 仅同步更改的块和字节,如果您明确想要同步整个文件,那么您可以使用 '-W' 选项。

# rsync -zvhW backup.tar /tmp/backups/backup.tar
backup.tar
sent 14.71M bytes  received 31 bytes  3.27M bytes/sec
total size is 16.18M  speedup is 1.10
结论

我们的概述到此结束同步及其能力。为了进一步探索其广泛的选项和功能,我鼓励您参考可用的综合手册页(手册页)。