linux中rsync命令的10个实际示例

rsync 命令的一些优点和特点

  • 它可以高效地将文件复制到远程系统或从远程系统同步文件。
  • 支持复制链接、设备、所有者、组和权限。
  • 它比scp更快因为rsync使用远程更新协议,该协议允许仅传输两组文件之间的差异。第一次,它将文件或目录的全部内容从源复制到目标,但从下一次开始,它只将更改的块和字节复制到目标。
  • rsync使用压缩和解压缩方法,同时在两端发送和接收数据,因此占用的带宽利用率较低。
rsync 命令的基本语法
  1. # rsync options source destination
与 rsync 命令一起使用的一些常用选项
  • -v: 显示rsync过程中详细信息
  • -r: 递归复制数据(但在传输数据时不要保留时间戳和权限。
  • -a: 存档模式,允许递归复制文件,还保留符号链接、文件权限、用户和组所有权以及时间戳。
  • -z: 压缩文件数据。
  • -h: 人类可读的,以人类可读的格式输出数字。

在 Linux系统中安装rsync

安装rsync借助 Linux 发行版中的以下命令进行打包。

  1. $ sudo apt-get install rsync [On Debian/Ubuntu & Mint]
  2. $ pacman -S rsync [On Arch Linux]
  3. $ emerge sys-apps/rsync [On Gentoo]
  4. $ dnf install rsync or yum install rsync [On Fedora/CentOS/RHEL and Rocky Linux/AlmaLinux]
  5. $ sudo zypper install rsync [On openSUSE]

1. 在本地复制 / 同步文件和目录

在本地计算机上复制 / 同步文件

以下命令将本地计算机上的单个文件从一个位置同步到另一个位置。在这个例子中,一个文件名backup.tar需要复制或同步到/tmp/backups/文件夹。

  1. [rumenz@local]# rsync -zvh backup.tar.gz /tmp/backups/
  2. created directory /tmp/backups
  3. backup.tar.gz
  4. sent 224.54K bytes received 70 bytes 449.21K bytes/sec
  5. total size is 224.40K speedup is 1.00

在上面的例子中,你可以看到如果目的地不存在,rsync 会自动为目的地创建一个目录。

复制 / 同步本地计算机上的目录

以下命令会将所有文件从一个目录传输或同步到同一台机器上的另一个目录。在这个例子中,/root/rpmpkgs包含一些 rpm 包文件,并且你希望将该目录复制到其中/tmp/backups/文件夹。

  1. [rumenz@local]# rsync -avzh /root/rpmpkgs /tmp/backups/
  2. sending incremental file list
  3. rpmpkgs/
  4. rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
  5. rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
  6. rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
  7. rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm
  8. sent 3.47M bytes received 96 bytes 2.32M bytes/sec
  9. total size is 3.74M speedup is 1.08

2. 向或从服务器复制 / 同步文件和目录

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

此命令会将目录从本地机器同步到远程机器。For example,你的本地计算机中有一个文件夹 rpmpkgs,其中包含一些RPM包并且你希望本地目录的内容发送到远程服务器,你可以使用以下命令。

  1. [rumenz@local:~]# rsync -avzh /root/rpmpkgs root@192.168.1.110:/root/
  2. The authenticity of host '192.168.0.141 (192.168.0.141)' can't be established.
  3. ED25519 key fingerprint is SHA256:bH2tiWQn4S5o6qmZhmtXcBROV5TU5H4t2C42QDEMx1c.
  4. This key is not known by any other names
  5. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
  6. Warning: Permanently added '192.168.0.141' (ED25519) to the list of known hosts.
  7. root@192.168.1.110's password:
  8. sending incremental file list
  9. rpmpkgs/
  10. rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
  11. rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
  12. rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
  13. rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm
  14. sent 3.74M bytes received 96 bytes 439.88K bytes/sec
  15. total size is 3.74M speedup is 1.00
将远程目录复制 / 同步到本地计算机

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

  1. [rumenz@local:~]# rsync -avzh root@192.168.1.110:/root/rpmpkgs /tmp/myrpms
  2. root@192.168.1.110's password:
  3. receiving incremental file list
  4. created directory /tmp/myrpms
  5. rpmpkgs/
  6. rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
  7. rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
  8. rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
  9. rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm
  10. sent 104 bytes received 3.49M bytes 997.68K bytes/sec
  11. total size is 3.74M speedup is 1.07

3. 通过 SSH 同步

rsync, 我们可以用SSH(Secure Shell) 进行数据传输,使用SSH传输我们的数据时的协议,你可以确保你的数据是通过加密的安全连接传输的,这样在互联网上通过线路传输时,没有人可以读取你的数据。

当我们使用rsync我们需要提供user/root密码来完成那个特定的任务,所以使用SSH选项将以加密方式发送你的登录信息,以便你password将是安全的。

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

指定一个协议rsync你需要给 -e 选项与你要使用的协议名称。在这个例子中,我们将使用 ssh-e 选项并执行数据传输。

  1. [rumenz@local:~]# rsync -avzhe ssh root@192.168.1.110:/root/anaconda-ks.cfg /tmp
  2. root@192.168.1.110's password:
  3. receiving incremental file list
  4. anaconda-ks.cfg
  5. sent 43 bytes received 1.10K bytes 325.43 bytes/sec
  6. total size is 1.90K speedup is 1.67
使用 SSH 将文件从本地服务器复制到远程服务器
  1. [rumenz@local:~]# rsync -avzhe ssh backup.tar.gz root@192.168.1.110:/backups/
  2. root@192.168.1.110's password:
  3. sending incremental file list
  4. created directory /backups
  5. backup.tar.gz
  6. sent 224.59K bytes received 66 bytes 64.19K bytes/sec
  7. total size is 224.40K speedup is 1.00

4. 使用 rsync 传输数据时显示进度

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

  1. [rumenz@local:/]# rsync -avzhe ssh --progress /root/rpmpkgs root@192.168.1.110:/root/rpmpkgs
  2. root@192.168.1.110's password:
  3. sending incremental file list
  4. rpmpkgs/
  5. rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
  6. 1.47M 100% 31.80MB/s 0:00:00 (xfr#1, to-chk=3/5)
  7. rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
  8. 138.01K 100% 2.69MB/s 0:00:00 (xfr#2, to-chk=2/5)
  9. rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
  10. 2.01M 100% 18.45MB/s 0:00:00 (xfr#3, to-chk=1/5)
  11. rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm
  12. 120.48K 100% 1.04MB/s 0:00:00 (xfr#4, to-chk=0/5)
  13. sent 3.74M bytes received 96 bytes 1.50M bytes/sec
  14. total size is 3.74M speedup is 1.00

5. –include 和 –exclude 选项的使用

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

在此示例中,rsync 命令将仅包含那些以R开头的文件和目录并排除所有其他文件和目录。

  1. [rumenz@local:/]# rsync -avze ssh --include 'R*' --exclude '*' root@192.168.1.110:/var/lib/rpm/ /root/rpm
  2. root@192.168.1.110's password:
  3. receiving incremental file list
  4. created directory /root/rpm
  5. ./
  6. Requirename
  7. sent 61 bytes received 273,074 bytes 60,696.67 bytes/sec
  8. total size is 761,856 speedup is 2.79

6.-delete 选项的使用

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

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

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

  1. [rumenz@local:~]# cd /root/rpm/
  2. [rumenz@local:~/rpm]# touch test.txt
  3. [rumenz@local:~/rpm]# rsync -avz --delete root@192.168.0.151:/var/lib/rpm/ /root/rpm/
  4. root@192.168.0.151's password:
  5. receiving incremental file list
  6. deleting test.txt
  7. ./
  8. .dbenv.lock
  9. .rpm.lock
  10. Basenames
  11. Conflictname
  12. Dirnames
  13. Enhancename
  14. Filetriggername
  15. Group
  16. Installtid
  17. Name
  18. Obsoletename
  19. Packages
  20. Providename
  21. Sha1header
  22. Sigmd5
  23. Suggestname
  24. Supplementname
  25. Transfiletriggername
  26. Triggername
  27. __db.001
  28. __db.002
  29. __db.003
  30. sent 445 bytes received 18,543,954 bytes 2,472,586.53 bytes/sec
  31. total size is 71,151,616 speedup is 3.84

目标具有名为的新文件test.txt, 使用–delete选项,它删除了文件test.txt.

7. 设置要传输的文件的最大大小

你可以指定Max要传输或同步的文件大小。你可以用 –max-size“ 选项。在此示例中,最大文件大小为200k,所以这个命令将只传输那些等于或小于200k.

  1. [rumenz@local:~]# rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ root@192.168.0.151:/root/tmprpm
  2. root@192.168.0.151's password:
  3. sending incremental file list
  4. created directory /root/tmprpm
  5. ./
  6. .dbenv.lock
  7. .rpm.lock
  8. Conflictname
  9. Enhancename
  10. Filetriggername
  11. Group
  12. Installtid
  13. Name
  14. Obsoletename
  15. Recommendname
  16. Requirename
  17. Sha1header
  18. Sigmd5
  19. Suggestname
  20. Supplementname
  21. Transfiletriggername
  22. Triggername
  23. __db.002
  24. sent 129.52K bytes received 396 bytes 28.87K bytes/sec
  25. total size is 71.15M speedup is 547.66

8. 传输成功后自动删除源文件

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

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

  1. [rumenz@local:~]# rsync --remove-source-files -zvh backup.tar.gz root@192.168.0.151:/tmp/backups/
  2. root@192.168.0.151's password:
  3. backup.tar.gz
  4. sent 795 bytes received 2.33K bytes 894.29 bytes/sec
  5. total size is 267.30K speedup is 85.40
  6. [rumenz@local:~]# ls -l backup.tar.gz
  7. ls: cannot access 'backup.tar.gz': No such file or directory

9. 使用 rsync 进行试运行

如果你是使用 rsync 的新手并且不知道你的命令究竟要做什么。rsync 可能真的会弄乱目标文件夹中的内容,然后进行撤消可能是一项乏味的工作。

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

  1. [rumenz@local:~]# rsync --dry-run --remove-source-files -zvh backup.tar.gz root@192.168.0.151:/tmp/backups/
  2. root@192.168.0.151's password:
  3. backup.tar.gz
  4. sent 50 bytes received 19 bytes 19.71 bytes/sec
  5. total size is 267.30K speedup is 3,873.97 (DRY RUN)

10. rsync 设置带宽限制和传输文件

你可以从一台机器传输到另一台机器时设置带宽限制–bwlimit 选项。此选项可帮助我们限制I/O带宽。

  1. [rumenz@local]# rsync --bwlimit=100 -avzhe ssh /var/lib/rpm/ root@192.168.0.151:/root/tmprpm/
  2. root@192.168.0.151's password:
  3. sending incremental file list
  4. sent 324 bytes received 12 bytes 61.09 bytes/sec
  5. total size is 38.08M speedup is 113347.05

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

  1. [rumenz@local]# rsync -zvhW backup.tar /tmp/backups/backup.tar
  2. backup.tar
  3. sent 14.71M bytes received 31 bytes 3.27M bytes/sec
  4. total size is 16.18M speedup is 1.10

返回笔记列表
入门小站