前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux中rsync命令的10个实际示例

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

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

在 Linux系统中安装rsync

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

代码语言:javascript
复制
$ sudo apt-get install rsync   [On Debian/Ubuntu & Mint] 
$ pacman -S rsync              [On Arch Linux]
$ emerge sys-apps/rsync        [On Gentoo]
$ dnf install rsync or yum install rsync       [On Fedora/CentOS/RHEL and Rocky Linux/AlmaLinux]
$ sudo zypper install rsync    [On openSUSE]

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

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

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

代码语言:javascript
复制
[rumenz@local]# 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 会自动为目的地创建一个目录。

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

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

代码语言:javascript
复制
[rumenz@local]# 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

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

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

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

代码语言:javascript
复制
[rumenz@local:~]# rsync -avzh /root/rpmpkgs root@192.168.1.110:/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.
root@192.168.1.110'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
将远程目录复制 / 同步到本地计算机

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

代码语言:javascript
复制
[rumenz@local:~]# rsync -avzh root@192.168.1.110:/root/rpmpkgs /tmp/myrpms

root@192.168.1.110'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

3. 通过 SSH 同步

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

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

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

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

代码语言:javascript
复制
[rumenz@local:~]# rsync -avzhe ssh root@192.168.1.110:/root/anaconda-ks.cfg /tmp

root@192.168.1.110'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
使用 SSH 将文件从本地服务器复制到远程服务器
代码语言:javascript
复制
[rumenz@local:~]# rsync -avzhe ssh backup.tar.gz root@192.168.1.110:/backups/

root@192.168.1.110'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

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

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

代码语言:javascript
复制
[rumenz@local:/]# rsync -avzhe ssh --progress /root/rpmpkgs root@192.168.1.110:/root/rpmpkgs

root@192.168.1.110'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

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

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

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

代码语言:javascript
复制
[rumenz@local:/]# rsync -avze ssh --include 'R*' --exclude '*' root@192.168.1.110:/var/lib/rpm/ /root/rpm

root@192.168.1.110's password: 
receiving incremental file list
created directory /root/rpm
./
Requirename

sent 61 bytes  received 273,074 bytes  60,696.67 bytes/sec
total size is 761,856  speedup is 2.79

6.-delete 选项的使用

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

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

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

代码语言:javascript
复制
[rumenz@local:~]# cd /root/rpm/
[rumenz@local:~/rpm]# touch test.txt
[rumenz@local:~/rpm]# rsync -avz --delete root@192.168.0.151:/var/lib/rpm/ /root/rpm/

root@192.168.0.151'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

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

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

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

代码语言:javascript
复制
[rumenz@local:~]# rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ root@192.168.0.151:/root/tmprpm

root@192.168.0.151'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

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

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

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

代码语言:javascript
复制
[rumenz@local:~]# rsync --remove-source-files -zvh backup.tar.gz root@192.168.0.151:/tmp/backups/

root@192.168.0.151'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

[rumenz@local:~]# ls -l backup.tar.gz

ls: cannot access 'backup.tar.gz': No such file or directory

9. 使用 rsync 进行试运行

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

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

代码语言:javascript
复制
[rumenz@local:~]# rsync --dry-run --remove-source-files -zvh backup.tar.gz root@192.168.0.151:/tmp/backups/

root@192.168.0.151'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)

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

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

代码语言:javascript
复制
[rumenz@local]# rsync --bwlimit=100 -avzhe ssh  /var/lib/rpm/  root@192.168.0.151:/root/tmprpm/
root@192.168.0.151'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 选项。

代码语言:javascript
复制
[rumenz@local]# 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

相关文章

linux之rsync远程同步文件

Linux之scp命令

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 入门小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • rsync 命令的一些优点和特点
    • rsync 命令的基本语法
      • 与 rsync 命令一起使用的一些常用选项
      • 在 Linux系统中安装rsync
      • 1. 在本地复制 / 同步文件和目录
        • 在本地计算机上复制 / 同步文件
          • 复制 / 同步本地计算机上的目录
          • 2. 向或从服务器复制 / 同步文件和目录
            • 将目录从本地服务器复制到远程服务器
              • 将远程目录复制 / 同步到本地计算机
              • 3. 通过 SSH 同步
                • 使用 SSH 将文件从远程服务器复制到本地服务器
                  • 使用 SSH 将文件从本地服务器复制到远程服务器
                  • 4. 使用 rsync 传输数据时显示进度
                  • 5. –include 和 –exclude 选项的使用
                  • 6.-delete 选项的使用
                  • 7. 设置要传输的文件的最大大小
                  • 8. 传输成功后自动删除源文件
                  • 9. 使用 rsync 进行试运行
                  • 10. rsync 设置带宽限制和传输文件
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档